How to introduce CAN interface for imx6ull module

Colibri-imx6ull 256 MB V1.1A
Voila Carrier board Rev1.2
Linux BSP 5

Hi,
I am currently working on virtual machine (Ubuntu 18.04 LTS). I follow the steps and get success in building Reference images provided by Yocto. Now for the next step, I want to introduce the CAN interface in device Tree and kernel. To start with this customization, I follow the steps as mention on Toradex.com/ Build U-Boot and Linux Kernel from Source Code:

  1. Download all the dependencies to build the Kernel and U-Boot outside the Yocto environment.

  2. Download the Linux source code from git for kernel branch (toradex_5.4-2.3.x-imx, BSP version-5.5)

  3. When I configure the same it couldn’t find the colibri-imx6ull _defconfig file under workdir/linuxtoradex/arch/arm64/configs. For the instance, I found the colibri-imx6ull _ defconfig file from workdir/linuxtoradex/arch/arm/configs folder and copied to default configs folder. It works fine.

  4. Next step I follow is to compile the kernel but then it came up with error:
    make: No rule to make target "zImage’’. Stop.
    How can I resolve this error??

Could anyone help us what are the correct steps for introducing CAN interface to the colibri module.

Dear @EJA, hope you’re doing good.

Can you please share with us which environment variables have you exported?

From what I understood, you may have a piece of misleading information. On the page you mentioned (Build U-Boot and Linux Kernel from Source Code | Toradex Developer Center) it shows that the Kernel of this module will be inside /arch/arm and that is because this specific module has a 32 bits architecture. Therefore you may use the 32bit arm toolchains.

On which exact command does this happen?

Best regards,
Guilherme

Thanks for replying @gclaudino.tx

I exported the following environmental variable:
$ export ARCH=arm64
$ export DTC_FLAGS="-@"
$ export PATH=~/gcc-linaro/bin/:$PATH
$ export CROSS_COMPILE=aarch64-none-linux-gnu-
I downloaded the wrong toolchain i.e. arm64 bit toolchains.

After this command:
$ make -j$(nproc) zImage 2>&1 | tee build.log

Dear @EJA,

Could you please retry using the right toolchains and check if you get any other errors?

Best regards,
Guilherme

Thanks @gclaudino.tx .
This works fine with 32 bit toolchains.

For introducing the CAN interface to the device tree, Should I make changes to the device tree overlay given in the chapters:
1- Device Tree Overlay

2- CAN (Linux) (toradex.com)

3- Build U-Boot and Linux Kernel from Source Code (toradex.com)

Dear @EJA,

Thanks for the update. This is indeed the way to go. You should either create a custom overlay, or maybe a custom device tree based on our existing ones if you don’t feel comfortable with Overlays (Device Tree Customization | Toradex Developer Center). You could also, for instance, have a look at posts like this one: CAN device-tree configuration on iMX6ULL - #5 by mthpvg

Remember when you build your device tree to check if you don’t have any pin conflict.

Please tell me if this helps you or if you need any further assistance.

Best regards,

Dear @EJA,

How are you? Have you been able to solve your issue related to the CAN interface?

Best regards,

Hi @gclaudino.tx

I am fine. Thanks for asking. As I got stuck in VM and Linux based system, CAN interface works goes on hold but in the next upcoming weeks I will work on this and will reach out you for help.

Thanks and regards,
Eiti

1 Like

Hi @gclaudino.tx ,

After building the kernel source file, I obtain various device tree files under arch/arm/boot/dts. I have few questions if you can answer them-

1- As I am using voila carrier board, I couldn’t able to find any dts file of this carrier board?

2- What is difference between imx6ull-colibri-eval-v3.dtsi, imx6ull-colibri-wifi-v3.dtsi, and imx6ull-colibri-non-wifi-v3.dtsi files?

3- How to create and where I need to create patch files and which files needed to be patch to enable the CAN interface on colibri imx6ull ?

4- What is pinctrl_hog ? Where I can see the pin under pinctrl_hog_7 or pinctrl_hog_1 as mention in CAN (Linux)

Thanks and Regards,
Eiti

Dear @EJA,

Thanks for the update. About your questions:

You will not find a dts file specific for the Viola. You should not have any problem however on using the one for another Carrier Board such as the Development Board on it even though most of the interfaces would not be present.


These files are included inside other device trees. The imx6ull-colibri-eval-v3 has the setup for the interfaces that are specific to the Evaluation Board. The difference between wifi and non-wifi dtsi is the interfaces that the module has. A Module with Wifi need some things enable that one without would not.


This depends on what you’d prefer. If you use more recent BSP’s you could create an overlay to modify the main device trees and then you’d not need to create a specific patch. Did you have the time to look at the links I mentioned you earlier?


I think pinctrl_hog is an old name. If you check the SODIMM_NUMBERS you can find it under GPIO’s on newer versions. For instance, SODIMM 55 and 63 are under gpio2 as long as 188 and 178. We’ll update this on the developer page.

Lastly, I’d also suggest you to use the new developer webpage at developer.toradex.com and not developer-archives.

Please tell me if this helps you.

Best regards,

Ok. Therefore, I have to use the eval.dts file for further modifications.

Yes, I look at those links. They had created patch files. Therefore, yesterday I also managed to create the patch files. I didn’t create any overlay. I am going for the process mention in Device Tree Customization | Toradex Developer Center. I just make changes to dtsi files and then created the patch for files that are mentioned in CAN (Linux) | Toradex Developer Center and CAN device-tree configuration on iMX6ULL - #5 by mthpvg.
I build the kernel outside the yocto. Create the patch files outside the Yocto. Am I going in right direction ?

Yes, I can see the SODIMM 55 and 63 under gopi2 (imx6ull-colibri-wifi.dtsi) but the defination to use those pins is given in pinctrl_gpio7 (imx6ull-colibri.dtsi). Is this not contradicting? Is that means that I have remove pinctrl_gpio7 group from iomuxc group?

Thanks for your support. This really helps a lot to solve my queries and to further go in my development.

Thanks and regards,
Eiti

After creating patch files for changes to incorporate the CAN interface into device tree, I added the patches to custom recipee inside layers/meta-customer/recipes-kernel/linux/ and created the bbappend file in layers/meta-customer/recipes-kernel/linux/linux-toradex%.bbappend to add patch files into SRC_URI.

What should be next steps I has to follow to see changes on Toradex module?

Dear @EJA,

You can use this path. If you create the device trees outside Yocto, please be sure that you compiled them correctly, deployed on your module and corrected the device tree used in U-boot.


Yes, like suggested on the post with pinctrl_hog.


This message is not so clear to me. You added the patch to Yocto then?


There are a lot of possibilities to check what has changed. You could, for instance:

  • Run zcat /proc/config.gz to check if the kernel configuration was properly applied
  • Run ls /dev | grep -i can

Or even use some of the commands listed on our developer page.

Please tell me if this helps you.