查看: 7013|回复: 0

[分享] Buildroot中构建NXP IMX8MM

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3299

    主题

    6546

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32024
    最后登录
    2024-4-25
    发表于 2020-5-12 14:43:19 | 显示全部楼层 |阅读模式
    Buildroot中构建NXP IMX8MM




    遇到的两个问题 :


    下载buildroot-2019.05-rc2版本,构建freescale_imx8mmevk_defconfig(由于imx8mmevk 和imx8mqevk差别不大,因此在imx8mqevk的基础上得到imx8mmevk) , 构建出的固件烧录到开发板,发现无法启动
    1. <font size="3" face="微软雅黑">make freescale_imx8mmevk_defconfig
    2. make
    3. // buildroot-2019.05-rc2/output/images 目录得到固件
    4. ├── bl31.bin
    5. ├── boot.vfat
    6. ├── fsl-imx8mm-evk.dtb
    7. ├── Image
    8. ├── imx8-boot-sd.bin
    9. ├── imx-boot-imx8mmevk-sd.bin-flash_evk
    10. ├── lpddr4_pmu_train_fw.bin
    11. ├── rootfs.ext2
    12. ├── rootfs.ext4 -> rootfs.ext2
    13. ├── rootfs.tar
    14. ├── sdcard.img
    15. ├── signed_hdmi_imx8m.bin
    16. ├── u-boot.bin
    17. ├── u-boot.imx
    18. ├── u-boot.itb
    19. ├── u-boot-nodtb.bin
    20. ├── u-boot-spl.bin
    21. └── u-boot-spl-ddr.bin
    22. </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 打包固件的配置文件中
    1. <font size="3" face="微软雅黑">buildroot-2019.05-rc2/board/freescale/common/imx/genimage.cfg.template_imx8
    2. image sdcard.img {
    3.   hdimage {
    4.   }

    5.   partition imx-boot {
    6.     in-partition-table = "no"
    7.      # image = "imx8-boot-sd.bin"
    8.      # 这里是重点
    9.     image = "imx-boot-imx8mmevk-sd.bin-flash_evk"
    10.     offset = %IMXOFFSET%
    11.   }

    12.   partition boot {
    13.     partition-type = 0xC
    14.     bootable = "true"
    15.     image = "boot.vfat"
    16.     offset = 8M
    17.   }

    18.   partition rootfs {
    19.     partition-type = 0x83
    20.     image = "rootfs.ext2"
    21.   }
    22. }
    23. </font>
    复制代码
    替换了uboot之后,打包出的sdcard.img 烧录进去,确实可以启动,内核也启动起来了,但是无法进入文件系统


    1. <font size="3" face="微软雅黑">[    4.194949] VSD_3V3: disabling
    2. [    4.199098] ALSA device list:
    3. [    4.202081]   #0: wm8524-audio
    4. [    4.205139]   #1: imx-spdif
    5. [    4.207946]   #2: imx-audio-micfil
    6. [    4.229743] EXT4-fs (mmcblk2p2): recovery complete
    7. [    4.235308] EXT4-fs (mmcblk2p2): mounted filesystem with ordered data mode. Opts: (null)
    8. [    4.243484] VFS: Mounted root (ext4 filesystem) on device 179:2.
    9. [    4.251138] devtmpfs: mounted
    10. [    4.254447] Freeing unused kernel memory: 1280K
    11. [    4.274522] EXT4-fs (mmcblk2p2): re-mounted. Opts: data=ordered
    12. Starting syslogd: OK
    13. Starting klogd: OK
    14. Initializing random number generator... [    4.310549] random: dd: uninitialized urandom read (512 bytes read)
    15. done.
    16. Starting network: OK

    17. // 起初以为是这里问题,没有加载音频相关的固件,后来想明白了,固件加载不成功,卡住也不合理。
    18. [    4.383016] imx-sdma 30bd0000.dma-controller: sdma firmware not ready!
    19. [    4.389557] imx-uart 30860000.serial:   
    20. [    4.446690] imx-sdma 30bd0000.dma-controller: sdma firmware not ready!
    21. [    4.453230] imx-uart 30860000.serial: Prepare for the RX slave dma failed!
    22. [    4.560810] imx-sdma 30bd0000.dma-controller: sdma firmware not ready!
    23. [    4.567366] imx-uart 30860000.serial: We cannot prepare for the TX slave dma!
    24. [    4.577798] imx-sdma 30bd0000.dma-controller: sdma firmware not ready!
    25. [    4.584355] imx-uart 30860000.serial: We cannot prepare for the TX slave dma!
    26. [    4.591517] imx-sdma 30bd0000.dma-controller: sdma firmware not ready!
    27. [    4.598071] imx-uart 30860000.serial: We cannot prepare for the TX slave dma!
    28. [   62.567126] imx-sdma 30bd0000.dma-controller: external firmware not found, using ROM firmware
    29. [   62.567554] imx-sdma 302c0000.dma-controller: external firmware not found, using ROM firmware
    30. [   62.584223] imx-sdma 302b0000.dma-controller: external firmware not found, using ROM firmware
    31. </font>
    复制代码
    遇到这问题,走了2天的冤枉路。继续找问题


    NXP 最初提供的Yocto 编译出最小系统和Buildroot 最小文件系统做对比,对比差异发现区别很大,主要原因是 : Yocto 文件系统的启动方式是Systemd , 而 Buildroot 文件系统启动方式是 Sysvinit
    buildroot 中文件系统启动方式切换到Systemd,和Yocto 对比发现差异还是很大
    最后查资料,通过把Yocto文件系统启动方式切换为Sysvinit,进行对比,发现差异较小,果然发现了问题
    1. <font size="3" face="微软雅黑">BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0"
    2. 改为
    3. BR2_TARGET_GENERIC_GETTY_PORT="ttymxc1"
    4. 对应的是串口登录
    5. target/etc/ inittab
    6. ttymxc1::respawn:/sbin/getty -L  ttymxc1 0 vt100 # GENERIC_SERIAL
    7. </font>
    复制代码
    导致文件系统无法登录的原因应该是串口选择的不对,IMX8MM其实有两个串口,一个串口是Core-A53,另一个是Core-M4的.


    buildroot-2017.02 中添加freescale_imx8mmevk_defconfig相关配置,编译到内核报错 :


    1. <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 需要升级
    2.png


    总结
    系统无法进入文件系统这个问题走了不少弯路,最直接的办法,应该是熟悉内核到文件系统的过程,而不是去对比差异,这样耗时耗力



    文章出处:CSDN   原文链接:http://blog.csdn.net/z2066411585/article/details/90449175
    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-26 07:12 , Processed in 0.099197 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表