在线时间4067 小时
UID3441752
注册时间2017-11-21
NXP金币754069
TA的每日心情 | 开心 2024-3-26 15:16 |
---|
签到天数: 266 天 [LV.8]以坛为家I
管理员
- 积分
- 32024
- 最后登录
- 2024-4-25
|
Buildroot中构建NXP IMX8MM
遇到的两个问题 :
下载buildroot-2019.05-rc2版本,构建freescale_imx8mmevk_defconfig(由于imx8mmevk 和imx8mqevk差别不大,因此在imx8mqevk的基础上得到imx8mmevk) , 构建出的固件烧录到开发板,发现无法启动
- <font size="3" face="微软雅黑">make freescale_imx8mmevk_defconfig
- make
- // buildroot-2019.05-rc2/output/images 目录得到固件
- ├── bl31.bin
- ├── boot.vfat
- ├── fsl-imx8mm-evk.dtb
- ├── Image
- ├── imx8-boot-sd.bin
- ├── imx-boot-imx8mmevk-sd.bin-flash_evk
- ├── lpddr4_pmu_train_fw.bin
- ├── rootfs.ext2
- ├── rootfs.ext4 -> rootfs.ext2
- ├── rootfs.tar
- ├── sdcard.img
- ├── signed_hdmi_imx8m.bin
- ├── u-boot.bin
- ├── u-boot.imx
- ├── u-boot.itb
- ├── u-boot-nodtb.bin
- ├── u-boot-spl.bin
- └── u-boot-spl-ddr.bin
- </font>
复制代码 烧录固件之后,发现一行打印也没有,代表uboot 都无法启动,而buildroot uboot 打包固件的脚本对应 : buildroot-2019.05-rc2/board/freescale/common/imx/imx8-bootloader-prepare.sh ,应该是该脚本出现问题,该问题并没有深入研究,
而是把Yocto 构建出的最小系统得到的imx-boot-imx8mmevk-sd.bin-flash_evk直接放到buildroot 打包固件的配置文件中
- <font size="3" face="微软雅黑">buildroot-2019.05-rc2/board/freescale/common/imx/genimage.cfg.template_imx8
- image sdcard.img {
- hdimage {
- }
- partition imx-boot {
- in-partition-table = "no"
- # image = "imx8-boot-sd.bin"
- # 这里是重点
- image = "imx-boot-imx8mmevk-sd.bin-flash_evk"
- offset = %IMXOFFSET%
- }
- partition boot {
- partition-type = 0xC
- bootable = "true"
- image = "boot.vfat"
- offset = 8M
- }
- partition rootfs {
- partition-type = 0x83
- image = "rootfs.ext2"
- }
- }
- </font>
复制代码 替换了uboot之后,打包出的sdcard.img 烧录进去,确实可以启动,内核也启动起来了,但是无法进入文件系统
- <font size="3" face="微软雅黑">[ 4.194949] VSD_3V3: disabling
- [ 4.199098] ALSA device list:
- [ 4.202081] #0: wm8524-audio
- [ 4.205139] #1: imx-spdif
- [ 4.207946] #2: imx-audio-micfil
- [ 4.229743] EXT4-fs (mmcblk2p2): recovery complete
- [ 4.235308] EXT4-fs (mmcblk2p2): mounted filesystem with ordered data mode. Opts: (null)
- [ 4.243484] VFS: Mounted root (ext4 filesystem) on device 179:2.
- [ 4.251138] devtmpfs: mounted
- [ 4.254447] Freeing unused kernel memory: 1280K
- [ 4.274522] EXT4-fs (mmcblk2p2): re-mounted. Opts: data=ordered
- Starting syslogd: OK
- Starting klogd: OK
- Initializing random number generator... [ 4.310549] random: dd: uninitialized urandom read (512 bytes read)
- done.
- Starting network: OK
- // 起初以为是这里问题,没有加载音频相关的固件,后来想明白了,固件加载不成功,卡住也不合理。
- [ 4.383016] imx-sdma 30bd0000.dma-controller: sdma firmware not ready!
- [ 4.389557] imx-uart 30860000.serial:
- [ 4.446690] imx-sdma 30bd0000.dma-controller: sdma firmware not ready!
- [ 4.453230] imx-uart 30860000.serial: Prepare for the RX slave dma failed!
- [ 4.560810] imx-sdma 30bd0000.dma-controller: sdma firmware not ready!
- [ 4.567366] imx-uart 30860000.serial: We cannot prepare for the TX slave dma!
- [ 4.577798] imx-sdma 30bd0000.dma-controller: sdma firmware not ready!
- [ 4.584355] imx-uart 30860000.serial: We cannot prepare for the TX slave dma!
- [ 4.591517] imx-sdma 30bd0000.dma-controller: sdma firmware not ready!
- [ 4.598071] imx-uart 30860000.serial: We cannot prepare for the TX slave dma!
- [ 62.567126] imx-sdma 30bd0000.dma-controller: external firmware not found, using ROM firmware
- [ 62.567554] imx-sdma 302c0000.dma-controller: external firmware not found, using ROM firmware
- [ 62.584223] imx-sdma 302b0000.dma-controller: external firmware not found, using ROM firmware
- </font>
复制代码 遇到这问题,走了2天的冤枉路。继续找问题
NXP 最初提供的Yocto 编译出最小系统和Buildroot 最小文件系统做对比,对比差异发现区别很大,主要原因是 : Yocto 文件系统的启动方式是Systemd , 而 Buildroot 文件系统启动方式是 Sysvinit
buildroot 中文件系统启动方式切换到Systemd,和Yocto 对比发现差异还是很大
最后查资料,通过把Yocto文件系统启动方式切换为Sysvinit,进行对比,发现差异较小,果然发现了问题
- <font size="3" face="微软雅黑">BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0"
- 改为
- BR2_TARGET_GENERIC_GETTY_PORT="ttymxc1"
- 对应的是串口登录
- target/etc/ inittab
- ttymxc1::respawn:/sbin/getty -L ttymxc1 0 vt100 # GENERIC_SERIAL
- </font>
复制代码 导致文件系统无法登录的原因应该是串口选择的不对,IMX8MM其实有两个串口,一个串口是Core-A53,另一个是Core-M4的.
buildroot-2017.02 中添加freescale_imx8mmevk_defconfig相关配置,编译到内核报错 :
- <font size="3" face="微软雅黑">Incorrect selection of kernel headers: expected 4.14, got 4.9</font>
复制代码 buildroot/support/scripts/check-kernel-headers.sh 在执行check-kernel-headers.sh时会检测这这个内核版本代码。
内核是4.14的,而交叉编译器这里选择的是4.9,双方不匹配导致。
buildroot -> Toolchain -> Custom kernel headers series 这里选择到4.14.x ,而问题是buildroot-2017.02 版本最高只支持到 4.9.x , buildroot 需要升级
总结
系统无法进入文件系统这个问题走了不少弯路,最直接的办法,应该是熟悉内核到文件系统的过程,而不是去对比差异,这样耗时耗力
文章出处:CSDN 原文链接:http://blog.csdn.net/z2066411585/article/details/90449175
|
|