Added recipe not building correctly

Hello,

I’m trying to build a custom image based on Apalis-iMX6_LXDE-Image_2.8b6, modifying some layers and adding some of my own.

In one of my layers I have a recipe that contains a patch, this patch modifies some files from the kernell so that the Apalis recognizes an external piece of hardware(a GNSS device connected through mini PCIe). This patch is not being applied correctly.

I have a .bbapend file referencing the patch in one of my meta-layers. The file contains this:

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

SRC_URI += "file://0001-Quectel-EC20-modifications.patch"    

I don’t really know where the problem is, but I think that it is related to the angstrom-lxde-image.bb file I use for building which I tried to modify by adding this patch to the “IMAGE_INSTALL” list

IMAGE_INSTALL += " \
    eject \
    gconf \
    
    ...

    \
    linux-yocto \  (my recipe)
    \
    ${IMAGE_BROWSER} \
"

But I get the following problem when I launch the bitbake angstrom:

ERROR: Nothing RPROVIDES 'linux-yocto' (but /home/ioecrops/build/../layers/meta-ioecrops-demos/recipes-images/images/angstrom-lxde-image.bb RDEPENDS on or otherwise requires it)
linux-yocto was skipped: incompatible with machine apalis-imx6 (not in COMPATIBLE_MACHINE)

Do you have any clue of what I am doing wrong? Is there any documentation on how to modify the angstrom-lxde-image.bb file so I can add the exact things I want (or create a brand new file for my project)?

Best regards, Alex

Hi @AlexPG

In one of my layers I have a recipe that contains a patch, this patch modifies some files from the kernell so that the Apalis recognizes an external piece of hardware(a GNSS device connected through mini PCIe). This patch is not being applied correctly.

Are the other patches working?

I don’t really know where the problem is, but I think that it is related to the angstrom-lxde-image.bb file I use for building which I tried to modify by adding this patch to the “IMAGE_INSTALL” list

Could you share all the changes you have done?

Do you have any clue of what I am doing wrong? Is there any documentation on how to modify the angstrom-lxde-image.bb file so I can add the exact things I want (or create a brand new file for my project)?

What exactly do you want to do? Why do you want to change angstrom-lxde-image.bb?

Best regards,
Jaski

Are the other patches working?

Other recipes from the layer are being built OK

Could you share all the changes you have done?

Basically I made the changes needed to detect the EC20 Quectel device (following this PDF guide, part 3.2) from the sources of kernel in branch linux-toradex-4.9-2.3.x-imx as we are using the bsp 2.8b6. This is the patch content:

From 19c1aa056ae14df12bd87bc1858a4e4ec92da15c Mon Sep 17 00:00:00 2001
From: Alex Pujol <alexpujgar@gmail.com>
Date: Fri, 31 May 2019 14:52:52 +0200
Subject: [PATCH] Quectel EC20 modifications

---
 drivers/net/usb/qmi_wwan.c    |  1 -
 drivers/usb/serial/option.c   |  9 +++++++++
 drivers/usb/serial/qcserial.c |  1 -
 drivers/usb/serial/usb_wwan.c | 12 ++++++++++++
 4 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 16e5c8c..2145a01 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -986,7 +986,6 @@ static const struct usb_device_id products[] = {
 	{QMI_GOBI_DEVICE(0x05c6, 0x9225)},	/* Sony Gobi 2000 Modem device (N0279, VU730) */
 	{QMI_GOBI_DEVICE(0x05c6, 0x9245)},	/* Samsung Gobi 2000 Modem device (VL176) */
 	{QMI_GOBI_DEVICE(0x03f0, 0x251d)},	/* HP Gobi 2000 Modem device (VP412) */
-	{QMI_GOBI_DEVICE(0x05c6, 0x9215)},	/* Acer Gobi 2000 Modem device (VP413) */
 	{QMI_FIXED_INTF(0x05c6, 0x9215, 4)},	/* Quectel EC20 Mini PCIe */
 	{QMI_GOBI_DEVICE(0x05c6, 0x9265)},	/* Asus Gobi 2000 Modem device (VR305) */
 	{QMI_GOBI_DEVICE(0x05c6, 0x9235)},	/* Top Global Gobi 2000 Modem device (VR306) */
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index b2b7c12..1df25b8 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -238,6 +238,7 @@ static void option_instat_callback(struct urb *urb);
 /* These Quectel products use Qualcomm's vendor ID */
 #define QUECTEL_PRODUCT_UC20			0x9003
 #define QUECTEL_PRODUCT_UC15			0x9090
+#define QUECTEL_PRODUCT_EC20			0x9215
 /* These u-blox products use Qualcomm's vendor ID */
 #define UBLOX_PRODUCT_R410M			0x90b2
 /* These Yuga products use Qualcomm's vendor ID */
@@ -1069,6 +1070,7 @@ static const struct usb_device_id option_ids[] = {
 	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */
 	/* Quectel products using Qualcomm vendor ID */
 	{ USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC15)},
+	{ USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_EC20)},
 	{ USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC20),
 	  .driver_info = RSVD(4) },
 	/* Yuga products use Qualcomm vendor ID */
@@ -1996,6 +1998,7 @@ static struct usb_serial_driver option_1port_device = {
 #ifdef CONFIG_PM
 	.suspend           = usb_wwan_suspend,
 	.resume            = usb_wwan_resume,
+	.reset_resume 	   = usb_wwan_resume,
 #endif
 };
 
@@ -2033,6 +2036,12 @@ static int option_probe(struct usb_serial *serial,
 	    iface_desc->bInterfaceClass != USB_CLASS_CDC_DATA)
 		return -ENODEV;
 
+	//Quectel EC20's interface 4 can be used as USB network device
+	if (serial->dev->descriptor.idVendor ==	cpu_to_le16(0x05C6)	&&
+		serial->dev->descriptor.idProduct == cpu_to_le16(0x9215) &&
+		serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
+		return -ENODEV;
+
 	/* Store the device flags so we can use them during attach. */
 	usb_set_serial_data(serial, (void *)device_flags);
 
diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
index fb6dc16..245ed65 100644
--- a/drivers/usb/serial/qcserial.c
+++ b/drivers/usb/serial/qcserial.c
@@ -92,7 +92,6 @@ static const struct usb_device_id id_table[] = {
 	{USB_DEVICE(0x03f0, 0x241d)},	/* HP Gobi 2000 QDL device (VP412) */
 	{USB_DEVICE(0x03f0, 0x251d)},	/* HP Gobi 2000 Modem device (VP412) */
 	{USB_DEVICE(0x05c6, 0x9214)},	/* Acer Gobi 2000 QDL device (VP413) */
-	{USB_DEVICE(0x05c6, 0x9215)},	/* Acer Gobi 2000 Modem device (VP413) */
 	{USB_DEVICE(0x05c6, 0x9264)},	/* Asus Gobi 2000 QDL device (VR305) */
 	{USB_DEVICE(0x05c6, 0x9265)},	/* Asus Gobi 2000 Modem device (VR305) */
 	{USB_DEVICE(0x05c6, 0x9234)},	/* Top Global Gobi 2000 QDL device (VR306) */
diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
index 3dfdfc8..a918f30 100644
--- a/drivers/usb/serial/usb_wwan.c
+++ b/drivers/usb/serial/usb_wwan.c
@@ -505,6 +505,18 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
 			  usb_sndbulkpipe(serial->dev, endpoint) | dir,
 			  buf, len, callback, ctx);
 
+	if (dir == USB_DIR_OUT) {
+		struct usb_device_descriptor *desc = &serial->dev->descriptor;
+		if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9090))
+			urb->transfer_flags |= URB_ZERO_PACKET;
+		if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9003))
+			urb->transfer_flags |= URB_ZERO_PACKET;
+		if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9215))
+			urb->transfer_flags |= URB_ZERO_PACKET;
+		if (desc->idVendor == cpu_to_le16(0x2C7C))
+			urb->transfer_flags |= URB_ZERO_PACKET;
+	}
+
 	return urb;
 }
 
-- 
2.7.4

What exactly do you want to do? Why do you want to change angstrom-lxde-image.bb?

Basically what I want is to use the EC20 module from Quectel I have to use it as a GNSS module, in order to do that I found this repo containing the recipe to add the EC25 module to a yocto based project, and made a similar patch but based on the EC20, the rest is all the same.

I added a modified recipe to a layer I made that contains other recipes from other projects like gpsd.

I don’t care which toradex image I use at the moment, it was just an example to test the build. In a project I found, which had many useful recipes, they modify console-tdx-image.bb and add their recipes after the IMAGE_INSTALL += " \ … and I thought that I should add my patch there with them.

Is this the right way to do it?

Basically what I want is to use the EC20 module from Quectel

Did you try to compile a custom kernel by activating the driver qcserial.c by the activating USB_SERIAL_QCAUX in the .kernel config.

have to use it as a GNSS module, in order to do that I found this repo containing the recipe to add the EC25 module to a yocto based project, and made a similar patch but based on the EC20, the rest is all the same.

Did you try to add the recipe without the patch?

Is this the right way to do it?

First of all you should try to add the driver/patch to the Linux kernel and create a custom kernel. Once this works, then you can go further for creating a custom recipe for the driver.

Best regards,
Jaski

I’ve been a few days working on this and other parts of the project, and I’ve finally been able to add the patch to the image by modifying and compiling the kernel and changing a few configurations from nconfig.

Thanks for your help!

Perfect that you found a solution. Thanks for the feedback.