Customized kernel & ReSpeaker 4-Mic Array on 40-pin header

Hello,

First time trying to compile and flash a customized kernel and I’m having some issue with it 😕

I’m trying to add compatibility with the reSpeaker 4 mic card, using this patch
https://github.com/AshaTalambedu/seeed-voicecard/tree/jetson-respeaker-4mic-array-compatible

I’ve downloaded the apropriate L4T 32.3.1 source, as intructed in the Readme, but first hurdle, the patch would not apply, I had to change some path structure, and fix some missing semi colon/other syntax error of that style, I don’t know if it’s normal or just on my side ?

So I ran the patch on my source folder, copied the file in it then followed the rest of this tutorial

https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3231/index.html?fbclid=IwAR3tB9s4rWlv9cGWIWNVtBfK2oYsIegZcYQxP0GpMzVZFKOwNg4QXBe_DN8#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fkernel_custom.html%23

(copied my files from $TEGRA_KERNEL_OUT inside my sources etc)

Finally I ran the ./jetson-disk-image-creator.sh to build an image of that modified source folder and flashed it to an sd card. And lo and behold

nothing. I can find any trace of any modificaiton I made. Do you know where I went wrong with that ?

Thanks !

You can just replace the /boot/Image for customized kernel Image.

Why sometimes replacing /boot/image doesn’t work ? Through the “dmesg” command, it is found that the image is flashed through recovery mode, not the latest /boot/image.

What’s kind of condition doesn’t working?

We compiled a custom image and replaced /boot/Image in nano with it. After restart, “dmesg” command show that the booting image is the old /boot/image, not the replacement one.

Could you confirm the context of the /boot/extlinux/extlinux.conf have below context.

LABEL primary
      MENU LABEL primary kernel
      LINUX /boot/Image

yes. Here is a screenshot.

How do you check the it’s old Image?
How do you reboot the system after replace the /boot/Image?

  1. We use dmesg command to check.

" #18 SMP PREEMPT Wed Mar 10 18:15:55 CST 2021 " show us the compilation time. The /boot/image is compiled and replaced an hour ago, clearly not Mar 10.

  1. We use “scp” command to send the compiled image by PC to emmc-nano and cover the /bootImage. Then execute reboot command to restart nano.

Could you confirm the kernel label by vim /boot/Image before and after reboot.

It is the same between before and after by vim /boot/Image. #6 SMP PREEMPT Mon Feb 1 19:43:51 CST 2021

However, dmesg shows another timestamp. #18 SMP PREEMPT Wed Mar 10 18:15:55 CST 2021

Will image not be encrypted cause this problem ?

That’s weird !!! What’s your version?

R32.4.3
Tegra210_Linux_R32.4.3_aarch64.tbz2 Tegra_Linux_Sample-Root-Filesystem_R32.4.3_aarch64.tbz2

Board is nano emmc B01.

Sometimes, replacing /boot/Image does work. However, It doesn’t work after more replacement times.

sudo ./flash.sh -K ./Image -k LNX jetson-nano-emmc mmcblk0p1

“flash.sh” tool works well every time. Is there anything different between “flash.sh -k LNX” and “cover /boot/Image” ?

The flash command will update the Image in the partition instead update the /boot/Image.
How about modify the extlinux.conf to change the /boot/Image to some others directory to try.

Changing the /boot/Image to /home/nvidia/Image doesn’t work either.

Does INITRD or APPEND have an impact ?

the APPEND doesn’t matter with the Image.

Could you try to figure out when it working and when didn’t working

If Image partition in emmc and /boot/Image are difference, which one will work? Image Partition?

Usually it should load the /boot/Image if the extlinux.conf have define the LINUX context.
Don’t know why for your case.

Image is directly compiled by kernel source code ? Don’t need to be encrypted?