查看: 1954|回复: 7

[分享] 【经验分享】i.MX6ULL开发:嵌入式Linux开发1-uboot移植初探

[复制链接]
  • TA的每日心情
    开心
    2020-12-18 12:56
  • 签到天数: 55 天

    [LV.5]常住居民I

    75

    主题

    225

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    1630
    最后登录
    2024-4-25
    发表于 2022-8-15 09:11:57 | 显示全部楼层 |阅读模式
    本系列教程以i.MX6ULL处理器的ARM开发板为实验基础,学习记录嵌入式Linux开发的各种知识与经验,主要内容包括嵌入式Linux移植,嵌入式Linux驱动开发,嵌入式Linux应用开发等。
    本系列教程将以野火的i.MX6ULL eMMC开发板为硬件基础,以野火EBF6ULL Pro开发板教程和正点原子i.MX6ULL阿尔法开发板教程为参考,进行学习实践。
    1 嵌入式Linux移植概述
    Linux 的移植主要包括3部分:
    移植bootloader 代码 Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段bootloader程序。 这段bootloader程序会先初始化DDR等外设, 然后将Linux内核从flash(NAND,NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。 bootloader 有很多,常用的就是 U-Boot。
    bootloader 和 Linux 内核的关系就跟 PC 上的 BIOS 和 Windows 的关系一样,bootloader 就相当于 BIOS。

    移植Linux 内核Linux内核由一系列程序组成,包括负责响应中断的中断服务程序、负责管理多个进程从而分享处理器时间的调度程序、负责管理地址空间的内存管理程序、网络、进程间通信的系统服务程序等。内核负责管理系统的硬件设备。

    移植根文件系统(rootfs)Linux 中的根文件系统更像是一个文件夹或者叫做目录,在这个目录里面会有很多的子目录。根目录下和子目录中会有很多的文件,这些文件是 Linux 运行所必须的,比如库、常用的软件和命令、设备文件、配置文件等等。根文件系统里面包含了一些最常用的命令和文件。

    U-Boot、Linux kernel 和 rootfs这三者一起构成了一个完整的 Linux 系统,一个可以正常使用、功能完善的 Linux 系统。

    2 实验开发板简介
    本测试使用的开发板为野火的i.MX6ULL eMMC开发板。
    图片 65.png
    3 U-Boot简介
    uboot 的全称是Universal Boot Loader,遵循 GPL 协议的开源软件。
    uboot 是一个裸机代码,可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。uboot 官网为 https://www.denx.de/wiki/U-Boot/
    图片 66.png
    可以在uboot官网下载uboot源码,点击左侧 Topics 中的“Source Code”,然后点击的“FTP Server” ,进入其 FTP 服务器即可看到 uboot 源码。
    但我们移植uboot时一般不会直接用 uboot 官方的源码的,官方的源码是给半导体厂商准备的,半导 体厂商会根据自家的芯片,维护自己芯片对应的uboot。
    NXP(freescale)维护的的uboot地址: https://github.com/Freescale/u-boot-fslc
    图片 67.png
    4 NXP uboot测试
    uboot移植并不需要从零开始将 uboot 移植到我们现在所使用的开发板上。因为半导体厂商通常都会自己做一个开发板(原厂开发板), uboot移植到他们自己的原厂开发板上,再将这个uboot(原厂BSP 包)发布出去。
    市面上的开发板,通常会参考原厂的开发板做硬件,然后在原厂提供的 BSP 包上做修改,如正点原子和野火的 I.MX6ULL 开发板参考的就是NXP官方的 I.MX6ULL EVK 开发板做的硬件:
    图片 68.png
    4.1 编译环境搭建4.1.1 交叉编译器下载
    嵌入式Linux开发,程序编译通常在电脑端的Linux(如虚拟机中的Ubuntu)下进行编译,Ubuntu 自带gcc 编译器,但该编译器是针对 X86 架构的!而嵌入式Linux是ARM架构的, 所以需要一个在 X86 架构上可以编译 ARM 架构代码的 gcc编译器,即交叉编译器
    交叉编译器有很多,本实验使用 Linaro 出品的交叉编译器,下载地址:
    https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/
    图片 69.png
    4.1.2 交叉编译器安装
    Ubuntu中创建目录:/usr/local/arm,并将下载的gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz复制到此文件中,然后解压,解压命令如下:
    sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
    解压完成以后会生成一个名为“gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。
    然后,需要将该目录添加到环境变量中。打开/etc/profile 以后,在最后面输入如下所示内容:
    xport PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
    图片 70.png
    使用交叉编译器之前还需要安装其它的库,命令如下:
    sudo apt-get install lsb-core lib32stdc++6
    安装完之后,可以查看交叉编译工具的版本号,输入如下命令:
    arm-linux-gnueabihf-gcc -v
    可以看到类似如下打印
    图片 71.png
    以看出当前交叉编译器的版本号为 4.9.4,说明交叉编译工具链安装成功。

    4.2 编译原厂uboot
    编译前还要在Ubuntu 中安装ncurses 库,安装命令如下:
    sudo apt-get install libncurses5-dev
    Ubuntu中创建存放uboot的目录,如我的目录是:/home/xxpcb/myTest/imx6ull/uboot/nxp_uboot
    然后,将NXP(freescale)的uboot源码复制进来,这里使用的是正点原子提供的NXP官方原版Uboot源码包( uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2)
    然后进行解压:
    tar -vxjf uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
    解压后的源码文件如下:
    图片 72.png
    首先看下uboot的配置configs 目录下有很多跟 I.MX6UL/6ULL 有关的配置,找到与mx6ull相同的,如下图。
    因为我这个开发板是emmc版本的,所有就使用这个mx6ull_14x14_evk_emmc_defconfig。
    图片 73.png
    编译uboot使用下面3条指令:
    1. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
    2. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
    3. make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
    复制代码

    3条命令中 :

    ARCH=arm 设置目标为 arm 架构

    CROSS_COMPILE 指定所使用的交叉编译器。

    1条命令相当于make distclean,目的是清除工程,一般在第一次编译的时候最好清理一下工程。

    2条指令相当于make mx6ull_14x14_evk_emmc_defconfig ,用于配置 uboot,配置文件为 mx6ull_14x14_evk_emmc_defconfig。

    3条指令相当于make -j8,也就是使用8核来编译uboot。

    为了方便的执行着3条指令,可以将这些指令写成shell脚本,比如在uboot源码目录下新建一个build.sh文件,写入如下内容:
    1. #!/bin/bash
    2. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
    3. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
    4. make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
    复制代码

    然后进行编译:
    ./build.sh
    图片 74.png
    编译完成以后uboot 源码多了一些文件,其中u-boot.bin就是编译出来的 uboot二进制文件。 uboot是个裸机程序, 因此需要在其前面
    加上头部(IVT、 DCD等数据)才能在I.MX6U上执行,u-boot.imx文件就是添加头部以后的 u-boot.bin。
    u-boot.imx 就是我们最终要烧写到开发板中的 uboot 镜像文件。
    图片 75.png
    4.3 烧录开发板
    这是的烧录开发板,实际是要烧录到SD卡中,然后将SD卡插入开发板,让开发板从SD卡启动(需要在开发板上设置拨码开关来选择启动方式)。
    4.3.1 烧录到SD卡
    正点原子专门编写了一个小软件用来将编译出来的.bin 文件烧写到 SD 卡中,这个软件叫做“imxdownload”
    imxdownload 复制到 Ubuntu 中的uboot源码文件夹,再使用如下指令,给予 imxdownload 可执行权限:
    chmod 777 imxdownload
    然后电脑USB中插入SD卡(读卡器),并在虚拟机中设置usb加载(VMware或VirtualBox虚拟机需要先安装增强功能才能使用)
    图片 76.png
    然后可以使用如下指令来查看SD卡的挂载标识符:
    ls /dev/sd*
    查看输出结果:
    图片 77.png
    这里的/dev/sdb就是我的SD卡。
    注:我第一次使用SD卡烧录时,只多出了/dev/sdb,但不知什么情况,用了几次后,再插入SD卡,就会同时多出来/dev/sdb和/dev/sdb1,但实际测试,仍然把程序烧录到/dev/sdb也能用)。
    imxdownload向SD卡烧写led.bin文件,命令格式如下:
    ./imxdownload u-boot.bin /dev/sdb
    注意不能烧写到/dev/sda或sda1设备里面!那是系统磁盘。
    烧写过程会输入如下信息:
    图片 78.png
    烧写的最后一行会显示烧写大小、用时和速度,比如u-boot.bin烧写到SD卡中的大小是 423KB,用时 1.7s,烧写速度是 236KB/s。
    注意这个烧写速度,如果这个烧写速度在几百KB/s 以下那么就是正常烧写。 如果这个烧写速度大于几十MB/s、甚至几百MB/s那么肯定是烧写失败了! 重新插拔/格式化SD卡或重启ubuntu再试。
    烧写完成以后会在当前工程目录下生成一个load.imx的文件,这个文件就是软件 imxdownload 根据 NXP 官方启动方式介绍的内容, 在 bin 文件前面添加了一些数据头以后生成的。最终烧写到 SD卡里面的就是这个imx文件。
    4.3.2 启动开发板
    烧录完之后,将SD卡插入开发板启动,使用串口连接电脑,查看uboot启动信息。
    设置好串口参数(波特率115200)并打开,按键复位开发板
    当串口打印上出现Hit any key to stop autoboot”倒计时的时候按下键盘上的回车键,默认是 3 秒倒计时,在 3 秒倒计时结束以后如果没有按下回车键的话 uboot 就会使用默认参数来启动 Linux 内核了。
    如果在 3 秒倒计时结束之前按下回车键,那么就会进入 uboot 的命令行模式:
    图片 79.png
    解读一下这些信息的含义:
    1行是 uboot 版本号和编译时间:当前的 uboot 版本号是 2016.03,编译时间是 2021/7 /11/15:22:25
    3、4 行是 CPU 信息:当前使用的 CPU 是飞思卡尔(属于NXP)的 I.MX6ULL (频率为 792MHz),此时运行在 396MHz。这颗芯片是工业级的,结温为-40°C~105°C
    5 行是复位原因I.MX6ULL 芯片上有个 POR_B 引脚,将这个引脚拉低即可复位 I.MX6ULL。
    6 行是板子名字“MX6ULL 14x14 EVK”即NXP原厂开发板的名字 。
    7 行提示 I2C 准备就绪
    8 行提示当前板子的DRAM(内存) 512MB
    9 行提示当前有两个MMC/SD 卡控制器FSL_SDHC(0)和 FSL_SDHC(1)。I.MX6ULL支持两个 MMC/SD,正点原子的 I.MX6ULL EMMC 核心板上 FSL_SDHC(0)接的 SD(TF)卡,FSL_SDHC(1)接的 EMMC。
    10行是一条警告信息,先忽略。
    12、13 行是 LCD 型号,原厂默认的是TFT43AB (480x272)。
    14~16 是标准输入、标准输出和标准错误所使用的终端,这里都使用串口(serial)作为终端。
    17 、18行是切换到emmc的第0个分区上,因为当前的 uboot 是 emmc 版本的,也就是从 emmc 启动的。我们只是为了方便将其烧写到了 SD 卡上,但是它的“内心”还是 EMMC的。所以 uboot 启动以后会将 emmc 作为默认存储器 。
    19行是网口信息,提示我们当前使用的 FEC1 这个网口,I.MX6ULL 支持两个网口。
    20行提示 FEC1 网卡地址没有设置(后面我们会讲解如何在uboot 里面设置网卡地址)。
    22行提示正常启动 也就是说 uboot要从emmc里面读取环境变量和参数信息启动 Linux内核了。
    23行是倒计时提示,默认倒计时 3 秒,倒计时结束之前按下回车键就会进入 Linux 命令行模式。如果在倒计时结束以后没有按下回车键,那么 Linux 内核就会启动,Linux 内核一旦启动,uboot 就运行结束了。
    23行是在倒计时 3 秒内按了回车键,符号=>表示可以继续与uboot进行命令交互
    看过了串口的uboot信息,再来看一下板子是实际运行情况:
    图片 80.png
    由于原厂的uboot驱动的屏幕是TFT43AB (480x272),与我这里屏幕不一样,所以屏幕没有正常显示(现在的屏幕看起来有许多彩色的小点点),接下来,就是对uboot进行屏幕驱动的修改。
    在本篇结束之前,再来研究一下uboot的串口指令。
    4.4 uboot命令初探
    上面说道,在uboot启动的3 秒倒计时内,串口界面如果按下了回车键,uboot就会输出符号=>,则可以继续与uboot进行命令交互。那可以输入哪些命令呢?
    4.4.1 help命令查看所有指令
    输入help或者? ,然后按下回车即可查看当前 uboot 所支持的命令:
    1. => help
    2. ?       - alias for 'help'
    3. base    - print or set address offset
    4. bdinfo  - print Board Info structure
    5. bmode   - sd1|sd2|qspi1|normal|usb|sata|ecspi1:0|ecspi1:1|ecspi1:2|ecspi1:3|esdhc1|esdhc2|esdhc3|esdhc4 [noreset]
    6. bmp     - manipulate BMP image data
    7. boot    - boot default, i.e., run 'bootcmd'
    8. bootd   - boot default, i.e., run 'bootcmd'
    9. bootelf - Boot from an ELF image in memory
    10. bootm   - boot application image from memory
    11. bootp   - boot image via network using BOOTP/TFTP protocol
    12. bootvx  - Boot vxWorks from an ELF image
    13. bootz   - boot Linux zImage image from memory
    14. clocks  - display clocks
    15. clrlogo - fill the boot logo area with black
    16. cmp     - memory compare
    17. coninfo - print console devices and information
    18. cp      - memory copy
    19. crc32   - checksum calculation
    20. dcache  - enable or disable data cache
    21. dhcp    - boot image via network using DHCP/TFTP protocol
    22. dm      - Driver model low level access
    23. echo    - echo args to console
    24. editenv - edit environment variable
    25. env     - environment handling commands
    26. erase   - erase FLASH memory
    27. exit    - exit script
    28. ext2load- load binary file from a Ext2 filesystem
    29. ext2ls  - list files in a directory (default /)
    30. ext4load- load binary file from a Ext4 filesystem
    31. ext4ls  - list files in a directory (default /)
    32. ext4size- determine a file's size
    33. ext4write- create a file in the root directory
    34. false   - do nothing, unsuccessfully
    35. fatinfo - print information about filesystem
    36. fatload - load binary file from a dos filesystem
    37. fatls   - list files in a directory (default /)
    38. fatsize - determine a file's size
    39. fdt     - flattened device tree utility commands
    40. flinfo  - print FLASH memory information
    41. fstype  - Look up a filesystem type
    42. fuse    - Fuse sub-system
    43. go      - start application at address 'addr'
    44. gpio    - query and control gpio pins
    45. help    - print command description/usage
    46. i2c     - I2C sub-system
    47. icache  - enable or disable instruction cache
    48. iminfo  - print header information for application image
    49. imxtract- extract a part of a multi-image
    50. itest   - return true/false on integer compare
    51. load    - load binary file from a filesystem
    52. loadb   - load binary file over serial line (kermit mode)
    53. loads   - load S-Record file over serial line
    54. loadx   - load binary file over serial line (xmodem mode)
    55. loady   - load binary file over serial line (ymodem mode)
    56. loop    - infinite loop on address range
    57. ls      - list files in a directory (default /)
    58. md      - memory display
    59. mdio    - MDIO utility commands
    60. mii     - MII utility commands
    61. mm      - memory modify (auto-incrementing address)
    62. mmc     - MMC sub system
    63. mmcinfo - display MMC info
    64. mtest   - simple RAM read/write test
    65. mw      - memory write (fill)
    66. nfs     - boot image via network using NFS protocol
    67. nm      - memory modify (constant address)
    68. ping    - send ICMP ECHO_REQUEST to network host
    69. pmic    - PMIC
    70. printenv- print environment variables
    71. protect - enable or disable FLASH write protection
    72. reset   - Perform RESET of the CPU
    73. run     - run commands in an environment variable
    74. save    - save file to a filesystem
    75. saveenv - save environment variables to persistent storage
    76. setenv  - set environment variables
    77. setexpr - set environment variable as the result of eval expression
    78. sf      - SPI flash sub-system
    79. showvar - print local hushshell variables
    80. size    - determine a file's size
    81. sleep   - delay execution for some time
    82. source  - run script from memory
    83. test    - minimal test like /bin/sh
    84. tftpboot- boot image via network using TFTP protocol
    85. true    - do nothing, successfully
    86. usb     - USB sub-system
    87. usbboot - boot from USB device
    88. version - print monitor, compiler and linker version
    89. =>
    复制代码


    4.4.2 查看指令的使用说明
    命令的具体使用方法,可以输入help 命令名或? 命令名查看,以“bootz”这个命令为例:
    1. => help bootz
    2. bootz - boot Linux zImage image from memory

    3. Usage:
    4. bootz [addr [initrd[:size]] [fdt]]
    5.    - boot Linux zImage stored in memory
    6.        The argument 'initrd' is optional and specifies the address
    7.        of the initrd in memory. The optional argument ':size' allows
    8.        specifying the size of RAW initrd.
    9.        When booting a Linux kernel which requires a flat device-tree
    10.        a third argument is required which is the address of the
    11.        device-tree blob. To boot that kernel without an initrd image,
    12.        use a '-' for the second argument. If you do not pass a third
    13.        a bd_info struct will be passed instead

    14. =>
    复制代码

    4.4.3 信息查询命令
    常用的和信息查询有关的命令有 3 个:bdinfo、printenv和 version。
    • bdinfo 板子信息
      1. => bdinfo
      2. arch_number = 0x00000000
      3. boot_params = 0x80000100
      4. DRAM bank   = 0x00000000
      5. -> start    = 0x80000000
      6. -> size     = 0x20000000
      7. eth0name    = FEC1
      8. ethaddr     = (not set)
      9. current eth = FEC1
      10. ip_addr     = <NULL>
      11. baudrate    = 115200 bps
      12. TLB addr    = 0x9FFF0000
      13. relocaddr   = 0x9FF47000
      14. reloc off   = 0x18747000
      15. irq_sp      = 0x9EF44EA0
      16. sp start    = 0x9EF44E90
      17. FB base     = 0x00000000
      18. =>
      复制代码

    => bdinfoarch_number = 0x00000000boot_params = 0x80000100DRAM bank   = 0x00000000-> start    = 0x80000000-> size     = 0x20000000eth0name    = FEC1ethaddr     = (not set)current eth = FEC1ip_addr     = <NULL>baudrate    = 115200 bpsTLB addr    = 0x9FFF0000relocaddr   = 0x9FF47000reloc off   = 0x18747000irq_sp      = 0x9EF44EA0sp start    = 0x9EF44E90FB base     = 0x00000000=>
    从打印信息可以得出 DRAM 的起始地址和大小、启动参数保存起始地址、波特率、sp(堆栈指针)起始地址等信息.
    • printenv 打印环境变量

    1. => printenv
    2. baudrate=115200
    3. board_name=EVK
    4. board_rev=14X14
    5. boot_fdt=try
    6. bootcmd=run findfdt;mmc dev ${mmcdev};mmc dev ${mmcdev}; if mmc rescan; then if run loadbootscript; then run bootscript; else if run loadimage; thn run mmcboot; else run netboot; fi; fi; else run netboot; fi
    7. bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
    8. bootdelay=3
    9. bootscript=echo Running bootscript from mmc ...; source
    10. console=ttymxc0
    11. ethact=FEC1
    12. ethprime=FEC
    13. fdt_addr=0x83000000
    14. fdt_file=undefined
    15. fdt_high=0xffffffff
    16. findfdt=if test $fdt_file = undefined; then if test $board_name = EVK && test $board_rev = 9X9; then setenv fdt_file imx6ull-9x9-evk.dtb; fi; if tst $board_name = EVK && test $board_rev = 14X14; then setenv fdt_file imx6ull-14x14-evk.dtb; fi; if test $fdt_file = undefined; then echo WARNING:Could not determine dtb to use; fi; fi;
    17. image=zImage
    18. initrd_addr=0x83800000
    19. initrd_high=0xffffffff
    20. ip_dyn=yes
    21. loadaddr=0x80800000
    22. loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
    23. loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
    24. loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
    25. mfgtool_args=setenv bootargs console=${console},${baudrate} rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.file=fat g_mass_storage.ro=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber="" clk_ignore_unused
    26. mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot}
    27. mmcautodetect=yes
    28. mmcboot=echo Booting from mmc ...; run mmcargs; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} -${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
    29. mmcdev=0
    30. mmcpart=1
    31. mmcroot=/dev/mmcblk0p2 rootwait rw
    32. netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
    33. netboot=echo Booting from net ...; run netargs; if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; ${get_cmd} ${imag}; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if ${get_cmd} ${fdt_addr} ${fdt_file}; then bootz ${loadaddr} - ${fdt_addr}; else if est ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
    34. panel=TFT43AB
    35. script=boot.scr

    36. Environment size: 2431/8188 bytes
    37. =>
    复制代码


    这里有很多的环境变量, 比如baudrate、 board_name、 board_rec、 boot_fdt、 bootcmd等。比如 bootdelay 这个环境变量就表示 uboot 启动延时时间,默认 bootdelay=3,也就默认延时 3秒。前面说的 3 秒倒计时就是由 bootdelay 定义的。另外uboot 中的环境变量都是字符串。
    • version 版本信息

    => version U-Boot 2016.03 (Jul 11 2021 - 15:22:25 +0800) arm-linux-gnueabihf-gcc (Linaro GCC 4.9-2017.01) 4.9.4 GNU ld (Linaro_Binutils-2017.01) 2.24.0.20141017 Linaro 2014_11-3-git=>
    当前uboot 版本号为 2016.03,编译日期2021/7/11,编译器为arm-linux-gnueabihf-gcc。
    本篇uboot移植初探(原厂uboot烧录测试)就到这里,下一篇进行实际的uboot移植,使得uboot与所用的开发板匹配。

    文章出处:码农爱学习
    签到
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:56
  • 签到天数: 1939 天

    [LV.Master]伴坛终老

    61

    主题

    1万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    17289
    最后登录
    2024-4-25
    发表于 2022-8-15 09:21:24 | 显示全部楼层
    学习
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-9 17:01
  • 签到天数: 1478 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92619
    最后登录
    2024-4-24
    发表于 2022-8-15 10:53:27 | 显示全部楼层
    感谢分享。话说我还有这么一块板子在吃灰中
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2022-8-25 19:13:22 | 显示全部楼层
    这搬运过来也是精挑细选之后的。
    谢谢楼主分享
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    7

    帖子

    0

    新手上路

    Rank: 1

    积分
    40
    最后登录
    2022-12-28
    发表于 2022-11-30 11:56:18 | 显示全部楼层
    使用REL_IMX_BOOT_5.47.47版本构建uboot时,按照上述步骤构建imx6sxsabresd_emmc_defconfig,最后生成文件没有uboot.imx,有uboot.bin和uboot-dtb.imx,该怎么解决呢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 00:31
  • 签到天数: 680 天

    [LV.9]以坛为家II

    12

    主题

    3036

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3666
    最后登录
    2024-4-25
    发表于 2022-12-5 13:24:32 | 显示全部楼层
    很详细了,谢谢楼主分享资料
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    3

    帖子

    0

    新手上路

    Rank: 1

    积分
    24
    最后登录
    2024-3-9
    发表于 2024-3-2 19:38:29 | 显示全部楼层
    有没有遇到过这个报错的,总是编译不过,是缺少什么东西吗,tools文件里面有很多都在报错,scripts/Makefile.host:104: recipe for target 'tools/dumpimage' failed
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-5-25 16:03
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    8

    主题

    718

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3395
    最后登录
    2024-3-5
    发表于 2024-3-5 09:30:01 | 显示全部楼层
    没玩过linux
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-26 07:56 , Processed in 0.141253 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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