My product uses the i.MX6DL. Originally we were using the 4.1.15 kernel (branch: imx_4.1.15_1.0.0_ga) housed here: linux-2.6-imx.git - Freescale i.MX Linux Tree
We recently found a need to upgrade. It looks like a more up to date listing of supported kernels can be found here: linux-imx - i.MX Linux kernel
Is this a correct assertion?
Assuming the is a list of supported kernels, On this page I was looking at the branch: git.kernel.org/linux-stable/linux-4.17.y (linux-imx - i.MX Linux kernel ). Our original 4.1.15 kernel had a lot of changes on the HDMI driver under <kernel_root>/drivers/video/fbdev/mxc, however I've noticed one of the major changes in this 4.17.19 kernel is this "mxc" subdirectory is missing. If this 4.17.19 kernel is valid, where did the fbdev/mxc work go?
解決済! 解決策の投稿を見る。
For posterity, the errors I encountered can be fixed by updating the defconfig accordingly:
//undefined reference to `psci_ops'
//solved by:
CONFIG_ARM_PSCI=y
//undefined reference to `imx_smp_wfe_optee'
//solved by:
CONFIG_TEE=y
CONFIG_OPTEE=y
currently, the latest version for imix6dl is 4.14.78
SABRE|Automotive-Infotainment|i.MX6|NXP
I checked the source code of 4.14.78, can find the mxc folder
currently, the latest version for imix6dl is 4.14.78
Thank you for your input. Based on your notes I grabbed the latest content from branch: imx_4.14.78_1.0.0_ga
And added in my defconfig and attempted to build the kernel. At the end of the build process I'm seeing an error:
$ make O=OUTPUT zImage LOADADDR=0x10008000
...
LD vmlinux.o
MODPOST vmlinux.o
arch/arm/mach-imx/cpuidle-imx6sl.o: In function `imx6sl_enter_wait':
cpuidle-imx6sl.c:(.text+0x128): undefined reference to `psci_ops'
arch/arm/mach-imx/cpuidle-imx6sx.o: In function `imx6_idle_finish':
cpuidle-imx6sx.c:(.text+0xe8): undefined reference to `psci_ops'
arch/arm/mach-imx/cpuidle-imx6ul.o: In function `imx6ul_idle_finish':
cpuidle-imx6ul.c:(.text+0x128): undefined reference to `psci_ops'
arch/arm/mach-imx/cpuidle-imx7d.o: In function `imx7d_enter_low_power_idle':
cpuidle-imx7d.c:(.text+0x37c): undefined reference to `psci_ops'
arch/arm/mach-imx/cpuidle-imx7d.o: In function `imx7d_idle_finish':
cpuidle-imx7d.c:(.text+0x3e4): undefined reference to `psci_ops'
arch/arm/mach-imx/cpuidle-imx7d.o:cpuidle-imx7d.c:(.init.text+0x1ac): more undefined references to `psci_ops' follow
arch/arm/mach-imx/busfreq_optee.o: In function `init_freq_optee':
busfreq_optee.c:(.text+0x51c): undefined reference to `imx_smp_wfe_optee'
busfreq_optee.c:(.text+0x520): undefined reference to `imx_smp_wfe_optee'
busfreq_optee.c:(.text+0x524): undefined reference to `imx_smp_wfe_optee_end'
/home/mike1worster/Development/kernel_upgrade/linux-imx-working-dir/Makefile:1020: recipe for target 'vmlinux' failed
make[1]: *** [vmlinux] Error 1
make[1]: Leaving directory '/home/mike1worster/Development/kernel_upgrade/linux-imx-working-dir/OUTPUT'
Makefile:146: recipe for target 'sub-make' failed
make: *** [sub-make] Error 2
I'm going to look into the error now and see if I can figure out what's wrong, but I thought I'd post in case this rang any bells. I'm guessing it's something in my 4.1.15 defconfig which isn't working when dropped into the 4.14.78 code base.
For posterity, the errors I encountered can be fixed by updating the defconfig accordingly:
//undefined reference to `psci_ops'
//solved by:
CONFIG_ARM_PSCI=y
//undefined reference to `imx_smp_wfe_optee'
//solved by:
CONFIG_TEE=y
CONFIG_OPTEE=y
Seems like the imx_v6_v7_defconfig starts breaking with the change: 0a569abd8bed55d999ea301f1616d59eb63d7bcf
Most likely the changes in the
arch/arm/mach-imx/smp_wfe_imx6.S |
file. I'll look into this tomorrow.
Looks like the issue is that TEE and OPTEE are not enabled in the imx_v6_v7_defconfig (this is enabled in the imx_v7_defconfig)
Adding:
CONFIG_TEE=y
CONFIG_OPTEE=y
to the imx_v6_v7_defconfig allows the latest 4.14.78 code to build successfully.
Question to Joan Xia or someone at NXP. Is this a safe configuration for the i.MX6DL? From what I've found https://www.nxp.com/docs/en/fact-sheet/TRUSTEXECENVIRFS.PDF it looks like this feature is "Supported on all i.MX6 and i.MX7 application processor families". So I assume the fact this wasn't enabled in the default imx_v6_v7_defconfig was just an oversight. Can someone confirm that?
I suggest that you remove the 4.1.15 and build the 4.14.78 again, I built 4.14.78 on my board successfully, if you build the 4.14.78 on the orginal kernal 4.1.15, which would cause some errors
I think you may have misunderstood. The code I'm building is pure 4.14.78 code downloaded from the imx_4.14.78_1.0.0_ga branch.
i.e.:
mike@bldmachine:~$ mkdir kernel_upgrade
mike@bldmachine:~$: cd !$
mike@bldmachine:~/kernel_upgrade$ git clone https://source.codeaurora.org/external/imx/linux-imx -b imx_4.14.78_1.0.0_ga .
The only 4.1.15 remnant was the defconfig which I used to build my specific content. I have removed this, cleaned the directory, done a fresh pull and attempted the build process again with a defconfig I found in the 4.14.78 code (imx_). These are the build steps following the above commands to get the code:
mike@bldmachine:~/kernel_upgrade$ mkdir OUTPUT
mike@bldmachine:~/kernel_upgrade$ make O=OUTPUT imx_v6_v7_defconfig
make[1]: Entering directory '/home/mike/kernel_upgrade/OUTPUT'
HOSTCC scripts/basic/fixdep
GEN ./Makefile
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#
make[1]: Leaving directory '/home/mike/kernel_upgrade/OUTPUT'
mike@bldmachine:~/kernel_upgrade$ make O=OUTPUT zImage LOADADDR=0x10008000
With this sequence, I'm still seeing errors:
MODPOST vmlinux.o
arch/arm/mach-imx/busfreq_optee.o: In function `init_freq_optee':
busfreq_optee.c:(.text+0x53c): undefined reference to `imx_smp_wfe_optee'
busfreq_optee.c:(.text+0x540): undefined reference to `imx_smp_wfe_optee'
busfreq_optee.c:(.text+0x544): undefined reference to `imx_smp_wfe_optee_end'
/home/mike/kernel_upgrade/Makefile:1020: recipe for target 'vmlinux' failed
make[1]: *** [vmlinux] Error 1
make[1]: Leaving directory '/home/mike/kernel_upgrade/OUTPUT'
Makefile:146: recipe for target 'sub-make' failed
make: *** [sub-make] Error 2
So it appears even the base content here isn't working with the current defconfig. Note the latest git commit ID on this line is:
commit 94da7bdc489ba686d868bcf80678a37cae22673e
Author: Peng Fan <peng.fan@nxp.com>
Date: Thu Jan 3 18:50:30 2019 +0800