基于 Beaglebone Black嵌入式linux系统u-boot编译 启动

2024-03-14 10:32

本文主要是介绍基于 Beaglebone Black嵌入式linux系统u-boot编译 启动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:blog.csdn.net/zy812248258/article/details/39252733 作者写的很好,我保存一下。谢谢分享。

以官方u-boot为例进行u-boot的编译,进入源码根目录可以看到内容如下,

[plain] view plain copy
  1. zhouyu@zhouyu-virtual-machine:~$ cd u-boot/  
  2. zhouyu@zhouyu-virtual-machine:~/u-boot$ ls  
  3. api        configs  dts       Kconfig      Makefile  snapshot.commit  
  4. arch       CREDITS  examples  lib          net       spl  
  5. board      disk     fs        Licenses     post      test  
  6. common     doc      include   MAINTAINERS  README    tools  
  7. config.mk  drivers  Kbuild    MAKEALL      scripts  


其中打开根目录下的Makefile文件,可以查看到本源码的版本,如下图:

step1:在进行任何操作之前,先清除源码树,

[plain] view plain copy
  1. zhouyu@zhouyu-virtual-machine:~/u-boot$ make distclean  
  2.   CLEAN   scripts/basic  
  3.   CLEAN   scripts/kconfig  
  4.   CLEAN   include/config include/generated spl  
  5.   CLEAN   .config include/autoconf.mk include/autoconf.mk.dep include/config.h  
  6. zhouyu@zhouyu-virtual-machine:~/u-boot$   


step2:编译之前的配置工作

[plain] view plain copy
  1. zhouyu@zhouyu-virtual-machine:~/u-boot$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 O=am335x_beaglebone_black am335x_boneblack_defconfig  
  2.   GEN     /home/zhouyu/u-boot/am335x_beaglebone_black/Makefile  
  3.   HOSTCC  scripts/basic/fixdep  
  4.   HOSTCC  scripts/kconfig/conf.o  
  5.   SHIPPED scripts/kconfig/zconf.tab.c  
  6.   SHIPPED scripts/kconfig/zconf.lex.c  
  7.   SHIPPED scripts/kconfig/zconf.hash.c  
  8.   HOSTCC  scripts/kconfig/zconf.tab.o  
  9.   HOSTLD  scripts/kconfig/conf  
  10. #  
  11. # configuration written to .config  
  12. #  
  13. #  
  14. # configuration written to spl/.config  
  15. #  
  16. zhouyu@zhouyu-virtual-machine:~/u-boot$   

          make之后的第一个参数向Makefile指明了编译的目标体系结构,第二个参数向Makefile指明了使用哪个编译工具链,第四个参数告诉make程序,这个编译任务要分配4个线程来并行进行,以加快编译速度,通常这个数依据自己的处理器的核数来选择,一般选择2倍核数,第五个参数告诉Makefile编译时产生的中间文件以及最后的结果都存放在源码树根目录下的am335x_beaglebone_black文件夹中,这对于使用同一个源码树来编译多个不同配置的u-boot时是一个很好的选择。最后一个参数向Makefile指明了要使用哪个文件来进行具体的配置,最后所有的配置都将写进源码树根目录下面的.config文件中。

          而至于具体后面应该跟一个什么样的配置参数,可以从下图中寻找答案

         在源码树的configs文件夹中可以看到很多配置文件,我选择的是第一个红线框的配置文件。

 

step3:正式开始编译工作

[plain] view plain copy
  1. zhouyu@zhouyu-virtual-machine:~/u-boot$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 O=am335x_beaglebone_black all  
  2.   GEN     /home/zhouyu/u-boot/am335x_beaglebone_black/Makefile  
  3. scripts/kconfig/conf --silentoldconfig Kconfig  
  4. scripts/kconfig/conf --silentoldconfig Kconfig  
  5.   CHK     include/config.h  
  6.   UPD     include/config.h  
  7.   GEN     include/autoconf.mk  
  8.   GEN     include/autoconf.mk.dep  
  9.   GEN     spl/include/autoconf.mk  
  10.   CHK     include/config/uboot.release  
  11.   CHK     include/generated/timestamp_autogenerated.h  
  12.   GEN     /home/zhouyu/u-boot/am335x_beaglebone_black/Makefile  
  13.   UPD     include/generated/timestamp_autogenerated.h  
  14.   UPD     include/config/uboot.release  
  15.   Using /home/zhouyu/u-boot as source for U-Boot  
  16.   CHK     include/generated/version_autogenerated.h  
  17.   UPD     include/generated/version_autogenerated.h  
  18.   CC      lib/asm-offsets.s  
  19.   CC      arch/arm/lib/asm-offsets.s  
  20.   GEN     include/generated/asm-offsets.h  
  21.   GEN     include/generated/generic-asm-offsets.h  
  22.   LDS     u-boot.lds  
  23.   HOSTCC  tools/gen_eth_addr  
  24.   HOSTCC  tools/img2srec  
  25.   HOSTCC  tools/aisimage.o  
  26.   HOSTCC  tools/atmelimage.o  
  27.   WRAP    tools/common/bootm.c  
  28.   WRAP    tools/common/image-fit.c  
  29.   WRAP    tools/common/image.c  
  30.   HOSTCC  tools/default_image.o  
  31.   HOSTCC  tools/dumpimage.o  
  32.   HOSTCC  tools/fit_common.o  
  33.   HOSTCC  tools/fit_image.o  
  34.   HOSTCC  tools/gpimage-common.o  
  35.   HOSTCC  tools/gpimage.o  
  36.   HOSTCC  tools/image-host.o  
  37.   HOSTCC  tools/imagetool.o  
  38.   HOSTCC  tools/imximage.o  
  39.   HOSTCC  tools/kwbimage.o  
  40.   WRAP    tools/lib/crc32.c  
  41.   WRAP    tools/lib/fdtdec.c  
  42.   WRAP    tools/lib/fdtdec_common.c  
  43.   WRAP    tools/lib/libfdt/fdt.c  
  44.   WRAP    tools/lib/libfdt/fdt_ro.c  
  45.   WRAP    tools/lib/libfdt/fdt_rw.c  
  46.   WRAP    tools/lib/libfdt/fdt_strerror.c  
  47.   WRAP    tools/lib/libfdt/fdt_wip.c  
  48.   WRAP    tools/lib/md5.c  
  49.   WRAP    tools/lib/sha1.c  
  50.   WRAP    tools/lib/sha256.c  
  51.   HOSTCC  tools/mkenvimage.o  
  52.   HOSTCC  tools/mkimage.o  
  53.   HOSTCC  tools/mxsimage.o  
  54.   HOSTCC  tools/omapimage.o  
  55.   HOSTCC  tools/os_support.o  
  56.   HOSTCC  tools/pbl_crc32.o  
  57.   HOSTCC  tools/pblimage.o  
  58.   HOSTCC  tools/ublimage.o  
  59.   HOSTCC  tools/proftool  
  60.   HOSTCC  tools/common/bootm.o  
  61.   HOSTCC  tools/common/image-fit.o  
  62.   HOSTCC  tools/common/image.o  
  63.   HOSTCC  tools/lib/crc32.o  
  64.   HOSTCC  tools/lib/fdtdec.o  
  65.   HOSTCC  tools/lib/fdtdec_common.o  
  66.   HOSTCC  tools/lib/libfdt/fdt.o  
  67.   HOSTCC  tools/lib/libfdt/fdt_ro.o  
  68.   HOSTCC  tools/lib/libfdt/fdt_rw.o  
  69.   HOSTCC  tools/lib/libfdt/fdt_strerror.o  
  70.   HOSTCC  tools/lib/libfdt/fdt_wip.o  
  71.   HOSTCC  tools/lib/md5.o  
  72.   HOSTCC  tools/lib/sha1.o  
  73.   HOSTCC  tools/lib/sha256.o  
  74.   HOSTLD  tools/mkenvimage  
  75.   HOSTLD  tools/dumpimage  
  76.   HOSTLD  tools/mkimage  
  77.   LD      arch/arm/cpu/built-in.o  
  78.   CC      arch/arm/cpu/armv7/cache_v7.o  
  79.   CC      arch/arm/cpu/armv7/am33xx/clock_am33xx.o  
  80.   CC      arch/arm/cpu/armv7/am33xx/clock.o  
  81.   AS      arch/arm/lib/vectors.o  
  82.   AS      arch/arm/lib/crt0.o  
  83.   AS      arch/arm/lib/relocate.o  
  84.   CC      arch/arm/lib/bootm-fdt.o  
  85.   CC      arch/arm/lib/bootm.o  
  86.   CC      arch/arm/cpu/armv7/am33xx/sys_info.o  
  87.   CC      arch/arm/cpu/armv7/cpu.o  
  88.   CC      arch/arm/cpu/armv7/am33xx/ddr.o  
  89.   CC      arch/arm/cpu/armv7/syslib.o  
  90.   CC      arch/arm/lib/sections.o  
  91.   CC      arch/arm/lib/interrupts.o  
  92.   CC      board/ti/am335x/board.o  
  93.   CC      arch/arm/cpu/armv7/am33xx/emif4.o  
  94.   CC      arch/arm/cpu/armv7/omap-common/reset.o  
  95.   CC      arch/arm/cpu/armv7/omap-common/timer.o  
  96.   CC      arch/arm/cpu/armv7/am33xx/board.o  
  97.   CC      arch/arm/lib/reset.o  
  98.   LD      board/ti/am335x/built-in.o  
  99.   CC      arch/arm/cpu/armv7/omap-common/utils.o  
  100.   CC      arch/arm/lib/cache.o  
  101.   CC      arch/arm/cpu/armv7/am33xx/mux.o  
  102.   CC      arch/arm/lib/cache-cp15.o  
  103.   CC      arch/arm/cpu/armv7/omap-common/omap-cache.o  
  104.   LD      arch/arm/cpu/armv7/am33xx/built-in.o  
  105.   CC      common/main.o  
  106.   CC      disk/part.o  
  107.   AR      arch/arm/lib/lib.a  
  108.   CC      arch/arm/cpu/armv7/omap-common/boot-common.o  
  109.   CC      arch/arm/lib/eabi_compat.o  
  110.   CC      common/command.o  
  111.   LD      arch/arm/lib/built-in.o  
  112.   AS      arch/arm/cpu/armv7/omap-common/lowlevel_init.o  
  113.   CC      arch/arm/cpu/armv7/omap-common/mem-common.o  
  114.   LD      drivers/block/built-in.o  
  115.   CC      disk/part_dos.o  
  116.   CC      drivers/bootcount/bootcount.o  
  117.   LD      arch/arm/cpu/armv7/omap-common/built-in.o  
  118.   AS      arch/arm/cpu/armv7/start.o  
  119.   LD      arch/arm/cpu/armv7/built-in.o  
  120.   CC      drivers/bootcount/bootcount_davinci.o  
  121.   CC      common/exports.o  
  122.   LD      drivers/dma/built-in.o  
  123.   CC      common/hash.o  
  124.   CC      disk/part_efi.o  
  125.   LD      drivers/bootcount/built-in.o  
  126.   LD      drivers/crypto/built-in.o  
  127.   CC      drivers/gpio/omap_gpio.o  
  128.   CC      drivers/dfu/dfu.o  
  129.   CC      common/cli_hush.o  
  130.   LD      drivers/gpio/built-in.o  
  131.   CC      drivers/i2c/i2c_core.o  
  132.   CC      drivers/i2c/omap24xx_i2c.o  
  133.   CC      drivers/dfu/dfu_mmc.o  
  134.   LD      disk/built-in.o  
  135.   LD      drivers/hwmon/built-in.o  
  136.   LD      drivers/memory/built-in.o  
  137.   LD      drivers/misc/built-in.o  
  138.   CC      drivers/pcmcia/tqm8xx_pcmcia.o  
  139.   CC      drivers/dfu/dfu_ram.o  
  140.   LD      drivers/i2c/built-in.o  
  141.   CC      drivers/rtc/date.o  
  142.   CC      common/cli_simple.o  
  143.   LD      drivers/pcmcia/built-in.o  
  144.   CC      common/cli.o  
  145.   LD      drivers/dfu/built-in.o  
  146.   CC      common/cli_readline.o  
  147.   LD      drivers/rtc/built-in.o  
  148.   LD      drivers/sound/built-in.o  
  149.   LD      drivers/tpm/built-in.o  
  150.   LD      drivers/twserial/built-in.o  
  151.   LD      drivers/video/built-in.o  
  152.   CC      drivers/watchdog/omap_wdt.o  
  153.   CC      common/s_record.o  
  154.   CC      common/xyzModem.o  
  155.   CC      common/cmd_disk.o  
  156.   CC      common/autoboot.o  
  157.   LD      drivers/watchdog/built-in.o  
  158.   LD      drivers/built-in.o  
  159.   CC      common/board_f.o  
  160.   CC      common/board_r.o  
  161.   CC      drivers/input/input.o  
  162.   CC      common/cmd_boot.o  
  163.   CC      common/cmd_bootm.o  
  164.   CC      common/bootm.o  
  165.   LD      drivers/input/built-in.o  
  166.   LD      drivers/mtd/built-in.o  
  167.   CC      drivers/mmc/mmc.o  
  168.   CC      common/bootm_os.o  
  169.   CC      drivers/mmc/omap_hsmmc.o  
  170.   CC      common/cmd_help.o  
  171.   CC      common/cmd_version.o  
  172.   CC      common/env_attr.o  
  173.   CC      common/env_callback.o  
  174.   CC      common/env_flags.o  
  175.   CC      common/env_mmc.o  
  176.   CC      common/cmd_source.o  
  177.   CC      drivers/mmc/mmc_write.o  
  178.   CC      common/cmd_bdinfo.o  
  179.   CC      common/cmd_console.o  
  180.   LD      drivers/mtd/onenand/built-in.o  
  181.   CC      common/cmd_echo.o  
  182.   LD      drivers/mmc/built-in.o  
  183.   CC      drivers/mtd/spi/sf.o  
  184.   CC      drivers/net/cpsw.o  
  185.   CC      common/cmd_eeprom.o  
  186.   CC      drivers/mtd/spi/sf_params.o  
  187.   CC      drivers/net/phy/phy.o  
  188.   CC      drivers/mtd/spi/sf_probe.o  
  189.   CC      common/cmd_exit.o  
  190.   CC      drivers/net/phy/smsc.o  
  191.   LD      drivers/net/built-in.o  
  192.   LD      drivers/pci/built-in.o  
  193.   CC      common/cmd_ext4.o  
  194.   CC      drivers/mtd/spi/sf_ops.o  
  195.   LD      drivers/power/built-in.o  
  196.   LD      drivers/power/battery/built-in.o  
  197.   LD      drivers/power/fuel_gauge/built-in.o  
  198.   LD      drivers/net/phy/built-in.o  
  199.   LD      drivers/power/mfd/built-in.o  
  200.   CC      common/cmd_ext2.o  
  201.   CC      drivers/serial/serial.o  
  202.   CC      drivers/power/pmic/pmic_tps65217.o  
  203.   CC      common/cmd_fat.o  
  204.   LD      drivers/mtd/spi/built-in.o  
  205.   CC      drivers/spi/spi.o  
  206.   CC      drivers/power/pmic/pmic_tps65910.o  
  207.   CC      common/cmd_fdt.o  
  208.   CC      drivers/serial/ns16550.o  
  209.   CC      drivers/spi/omap3_spi.o  
  210.   LD      drivers/power/pmic/built-in.o  
  211.   LD      drivers/usb/eth/built-in.o  
  212.   CC      common/fdt_support.o  
  213.   CC      drivers/serial/serial_ns16550.o  
  214.   LD      drivers/serial/built-in.o  
  215.   CC      drivers/usb/gadget/epautoconf.o  
  216.   CC      common/cmd_fs.o  
  217.   LD      drivers/spi/built-in.o  
  218.   CC      common/cmd_gpio.o  
  219.   CC      drivers/usb/gadget/config.o  
  220.   CC      common/cmd_i2c.o  
  221.   CC      common/cmd_itest.o  
  222.   CC      drivers/usb/gadget/usbstring.o  
  223.   LD      drivers/usb/host/built-in.o  
  224.   CC      common/cmd_load.o  
  225.   CC      drivers/usb/gadget/g_dnl.o  
  226.   CC      common/cmd_mem.o  
  227.   LD      drivers/usb/musb/built-in.o  
  228.   LD      drivers/usb/phy/built-in.o  
  229.   CC      drivers/usb/musb-new/musb_gadget.o  
  230.   LD      drivers/usb/ulpi/built-in.o  
  231.   CC      fs/fs.o  
  232.   CC      common/miiphyutil.o  
  233.   CC      fs/ext4/ext4fs.o  
  234.   CC      drivers/usb/gadget/f_dfu.o  
  235.   CC      fs/ext4/ext4_common.o  
  236.   CC      drivers/usb/gadget/ether.o  
  237.   CC      drivers/usb/musb-new/musb_gadget_ep0.o  
  238.   CC      common/cmd_mii.o  
  239.   CC      drivers/usb/musb-new/musb_core.o  
  240.   CC      common/cmd_mdio.o  
  241.   CC      fs/ext4/dev.o  
  242.   CC      common/cmd_misc.o  
  243.   CC      drivers/usb/gadget/rndis.o  
  244.   LD      fs/ext4/built-in.o  
  245.   CC      fs/fat/fat_write.o  
  246.   CC      drivers/usb/musb-new/musb_uboot.o  
  247.   CC      common/cmd_mmc.o  
  248.   CC      drivers/usb/musb-new/musb_host.o  
  249.   LD      drivers/usb/gadget/built-in.o  
  250.   CC      common/cmd_net.o  
  251.   CC      lib/lzo/lzo1x_decompress.o  
  252.   CC      common/cmd_part.o  
  253.   CC      common/cmd_pcmcia.o  
  254.   LD      lib/lzo/built-in.o  
  255.   CC      lib/zlib/zlib.o  
  256.   CC      common/cmd_sf.o  
  257.   CC      drivers/usb/musb-new/musb_dsps.o  
  258.   LD      drivers/usb/musb-new/built-in.o  
  259.   CC      common/cmd_spi.o  
  260.   CC      common/cmd_test.o  
  261.   CC      fs/fat/file.o  
  262.   CC      lib/crc7.o  
  263.   CC      common/cmd_usb.o  
  264.   CC      common/usb.o  
  265.   LD      fs/fat/built-in.o  
  266.   LD      fs/built-in.o  
  267.   LD      lib/zlib/built-in.o  
  268.   CC      lib/crc8.o  
  269.   CC      lib/libfdt/fdt.o  
  270.   CC      lib/crc16.o  
  271.   CC      lib/fdtdec_common.o  
  272.   CC      lib/libfdt/fdt_ro.o  
  273.   CC      common/usb_hub.o  
  274.   CC      lib/gunzip.o  
  275.   CC      common/usb_storage.o  
  276.   CC      lib/initcall.o  
  277.   CC      common/cmd_ximg.o  
  278.   CC      lib/lmb.o  
  279.   CC      lib/libfdt/fdt_rw.o  
  280.   CC      common/cmd_spl.o  
  281.   CC      lib/ldiv.o  
  282.   CC      lib/md5.o  
  283.   CC      net/arp.o  
  284.   CC      common/flash.o  
  285.   CC      lib/libfdt/fdt_strerror.o  
  286.   CC      lib/libfdt/fdt_sw.o  
  287.   CC      common/splash.o  
  288.   CC      net/bootp.o  
  289.   CC      lib/net_utils.o  
  290.   CC      common/cmd_dfu.o  
  291.   CC      lib/libfdt/fdt_wip.o  
  292.   CC      lib/qsort.o  
  293.   CC      net/eth.o  
  294.   CC      common/cmd_gpt.o  
  295.   CC      lib/sha1.o  
  296.   CC      lib/libfdt/fdt_empty_tree.o  
  297.   CC      lib/libfdt/fdt_addresses.o  
  298.   LD      lib/libfdt/built-in.o  
  299.   CC      lib/sha256.o  
  300.   CC      net/net.o  
  301.   CC      common/cmd_nvedit.o  
  302.   CC      lib/strmhz.o  
  303.   CC      lib/hashtable.o  
  304.   CC      common/env_common.o  
  305.   CC      net/nfs.o  
  306.   CC      net/ping.o  
  307.   CC      common/console.o  
  308.   CC      lib/errno.o  
  309.   CC      lib/display_options.o  
  310.   CC      net/tftp.o  
  311.   CC      lib/ctype.o  
  312.   CC      lib/crc32.o  
  313.   CC      lib/div64.o  
  314.   CC      common/dlmalloc.o  
  315.   LD      net/built-in.o  
  316.   CC      lib/hang.o  
  317.   LD      test/built-in.o  
  318.   CC      lib/linux_string.o  
  319.   LD      test/dm/built-in.o  
  320.   CC      lib/string.o  
  321.   CC      common/image.o  
  322.   CC      common/image-fdt.o  
  323.   CC      lib/time.o  
  324.   AS      spl/arch/arm/lib/vectors.o  
  325.   AS      spl/arch/arm/lib/crt0.o  
  326.   CC      spl/arch/arm/lib/spl.o  
  327.   CC      common/image-fit.o  
  328.   CC      spl/arch/arm/lib/sections.o  
  329.   CC      lib/uuid.o  
  330.   CC      spl/arch/arm/lib/interrupts.o  
  331.   CC      common/memsize.o  
  332.   CC      spl/arch/arm/lib/reset.o  
  333.   CC      lib/vsprintf.o  
  334.   CC      common/stdio.o  
  335.   CC      spl/arch/arm/lib/cache.o  
  336.   CC      spl/arch/arm/lib/cache-cp15.o  
  337.   AR      spl/arch/arm/lib/lib.a  
  338.   CC      spl/arch/arm/lib/eabi_compat.o  
  339.   LD      spl/arch/arm/lib/built-in.o  
  340.   CC      spl/arch/arm/cpu/armv7/cache_v7.o  
  341.   CC      spl/arch/arm/cpu/armv7/am33xx/clock_am33xx.o  
  342.   LD      common/built-in.o  
  343.   CC      spl/arch/arm/cpu/armv7/am33xx/clock.o  
  344.   CC      spl/arch/arm/cpu/armv7/cpu.o  
  345.   CC      spl/arch/arm/cpu/armv7/syslib.o  
  346.   LD      lib/built-in.o  
  347.   AS      spl/arch/arm/cpu/armv7/lowlevel_init.o  
  348.   AS      spl/arch/arm/cpu/armv7/start.o  
  349.   CC      spl/arch/arm/cpu/armv7/am33xx/sys_info.o  
  350.   CC      spl/arch/arm/cpu/armv7/omap-common/reset.o  
  351.   CC      spl/arch/arm/cpu/armv7/am33xx/ddr.o  
  352.   CC      examples/standalone/stubs.o  
  353.   CC      spl/arch/arm/cpu/armv7/omap-common/timer.o  
  354.   CC      spl/arch/arm/cpu/armv7/am33xx/emif4.o  
  355.   CC      spl/arch/arm/cpu/armv7/omap-common/utils.o  
  356.   CC      examples/standalone/hello_world.o  
  357.   CC      spl/board/ti/am335x/mux.o  
  358.   CC      spl/arch/arm/cpu/armv7/am33xx/board.o  
  359.   CC      spl/arch/arm/cpu/armv7/omap-common/omap-cache.o  
  360.   CC      spl/arch/arm/cpu/armv7/am33xx/mux.o  
  361.   LD      examples/standalone/libstubs.o  
  362.   CC      spl/board/ti/am335x/board.o  
  363.   LD      examples/standalone/hello_world  
  364.   CC      spl/arch/arm/cpu/armv7/omap-common/boot-common.o  
  365.   LD      spl/arch/arm/cpu/armv7/am33xx/built-in.o  
  366.   AS      spl/arch/arm/cpu/armv7/omap-common/lowlevel_init.o  
  367.   CC      spl/arch/arm/cpu/armv7/omap-common/mem-common.o  
  368.   OBJCOPY examples/standalone/hello_world.srec  
  369.   LD      spl/board/ti/am335x/built-in.o  
  370.   CC      spl/common/spl/spl.o  
  371.   OBJCOPY examples/standalone/hello_world.bin  
  372.   LD      spl/arch/arm/cpu/armv7/omap-common/built-in.o  
  373.   CC      spl/common/spl/spl_ymodem.o  
  374.   LD      spl/arch/arm/cpu/armv7/built-in.o  
  375.   CC      spl/common/spl/spl_net.o  
  376.   CC      spl/common/spl/spl_mmc.o  
  377.   CC      spl/common/spl/spl_fat.o  
  378.   CC      spl/disk/part.o  
  379.   CC      spl/disk/part_dos.o  
  380.   CC      spl/common/xyzModem.o  
  381.   LD      spl/common/spl/built-in.o  
  382.   CC      spl/drivers/i2c/i2c_core.o  
  383.   CC      spl/common/miiphyutil.o  
  384.   CC      spl/drivers/i2c/omap24xx_i2c.o  
  385.   CC      spl/disk/part_efi.o  
  386.   CC      spl/common/env_attr.o  
  387.   CC      spl/common/env_flags.o  
  388.   CC      spl/common/env_callback.o  
  389.   LD      spl/drivers/i2c/built-in.o  
  390.   CC      spl/drivers/gpio/omap_gpio.o  
  391.   CC      spl/common/env_nowhere.o  
  392.   CC      spl/common/cmd_nvedit.o  
  393.   LD      spl/disk/built-in.o  
  394.   CC      spl/drivers/mmc/mmc.o  
  395.   LD      spl/drivers/gpio/built-in.o  
  396.   CC      spl/drivers/mmc/omap_hsmmc.o  
  397.   CC      spl/common/env_common.o  
  398.   CC      spl/drivers/serial/serial.o  
  399.   CC      spl/drivers/serial/ns16550.o  
  400.   CC      spl/common/console.o  
  401.   CC      spl/drivers/serial/serial_ns16550.o  
  402.   LD      spl/drivers/mmc/built-in.o  
  403.   CC      spl/fs/fat/fat_write.o  
  404.   CC      spl/lib/crc16.o  
  405.   LD      spl/drivers/serial/built-in.o  
  406.   CC      spl/lib/net_utils.o  
  407.   CC      spl/lib/hashtable.o  
  408.   LD      spl/drivers/power/built-in.o  
  409.   CC      spl/common/dlmalloc.o  
  410.   CC      spl/lib/errno.o  
  411.   CC      spl/lib/display_options.o  
  412.   CC      spl/common/image.o  
  413.   CC      spl/lib/crc32.o  
  414.   CC      spl/common/image-fdt.o  
  415.   CC      spl/lib/ctype.o  
  416.   CC      spl/lib/div64.o  
  417.   CC      spl/lib/hang.o  
  418.   CC      spl/common/memsize.o  
  419.   CC      spl/common/stdio.o  
  420.   CC      spl/lib/linux_string.o  
  421.   CC      spl/lib/string.o  
  422.   LD      u-boot  
  423.   LD      spl/common/built-in.o  
  424.   CC      spl/drivers/power/pmic/pmic_tps65217.o  
  425.   LD      spl/fs/fat/built-in.o  
  426.   LD      spl/fs/built-in.o  
  427.   CC      spl/drivers/power/pmic/pmic_tps65910.o  
  428.   CC      spl/lib/time.o  
  429.   LD      spl/drivers/power/pmic/built-in.o  
  430.   CC      spl/net/arp.o  
  431.   CC      spl/net/bootp.o  
  432.   CC      spl/lib/uuid.o  
  433.   CC      spl/net/eth.o  
  434.   CC      spl/drivers/watchdog/omap_wdt.o  
  435.   CC      spl/lib/vsprintf.o  
  436.   LD      spl/drivers/watchdog/built-in.o  
  437.   CC      spl/drivers/usb/musb-new/musb_gadget.o  
  438.   LD      spl/arch/arm/cpu/built-in.o  
  439.   CC      spl/drivers/usb/musb-new/musb_gadget_ep0.o  
  440.   CC      spl/net/net.o  
  441.   LD      spl/lib/built-in.o  
  442.   LDS     spl/u-boot-spl.lds  
  443.   CC      spl/drivers/usb/musb-new/musb_core.o  
  444.   CC      spl/drivers/usb/musb-new/musb_uboot.o  
  445.   CC      spl/net/tftp.o  
  446.   CC      spl/drivers/usb/musb-new/musb_host.o  
  447.   CC      spl/drivers/usb/musb-new/musb_dsps.o  
  448.   LD      spl/net/built-in.o  
  449.   OBJCOPY u-boot.bin  
  450.   OBJCOPY u-boot.srec  
  451.   LD      spl/drivers/usb/musb-new/built-in.o  
  452.   LD      spl/u-boot-spl  
  453.   OBJCOPY spl/u-boot-spl.bin  
  454.   MKIMAGE MLO  
  455.   MKIMAGE u-boot.img  

 

编译工作至此完成。得到的结果如下图

图中所示文件和文件夹都在O=am335x_beaglebone_black所指定的文件夹中。

u-boot——ELF格式的可执行文件,由于里面含有调试程序所选的信息,所以该格式的可执行文件体积最大。

u-boot.bin——可以直接写入Flash的二进制可执行文件,直接被运行。

u-boot.srec——u-boot映像的S-Record格式

u-boot.map——这个文件包含了u-boot可执行文件的映像符号表

MLO——这个文件也是一个引导加载程序,用于加载u-boot.img到SDRAM。

 

u-boot-spl.bin——这个文件实际上就是纯粹的SPL程序,和上图的MLO文件相比,MLO=头部信息+u-boot-spl.bin。


具体使用那个文件根据自己的需要选择。

从SD卡启动时,应该把MLO、u-boot.img文件放到boot分区。

从串口启动时,应该传送u-boot-spl.bin、u-boot.img文件。



BeagleBone 的核心处理器是 AM3358,AM335x 有四个不同的启动阶段:

(1)ROM Code(处理器内部固化代码)
(2)SPL(Secondary Program Loader)
(3)U-BOOT
(4)Linux Kernel

为什么 AM335x 有多个启动阶段呢?直接从启动源加载 U-Boot 启动不是很方便?

一个全功能的U-Boot可能会超过400KB,因此不可能直接将它加载进内部RAM中直接运行,因此要分阶段。首先,第一步的 ROM Code (固化代码)不可能太复杂,ROM大小是一个限制,最重要的还是因为其所能获取的系统信息太少,所以处理器只能使用简单的方法去寻找能完成复杂功能的代码,而后将处理器初始化工作交给它来完成。其次,SPL (MLO)也不能很复杂,因为 ROM Code 只能将它加载到处理器内部 RAM 中运行,一般处理器的内部 RAM 都要小于128KB,其大小注定其不能完成很复杂的功能,所以 SPL 需要初始化 DDR 再加更复杂的代码加载到 DDR 中运行。到了在 DDR RAM 中执行的 Bootloader(U-Boot),其功能就比较完善了,此时就可以启动操作系统了。

第一阶段:ROM Code

ROM Code 是芯片上电复位之后第一块自动运行的代码。ROM Code 固化在芯片中不能被用户修改。 ROM Code 存储在片上地址 0x40000000-0x40040000 处。
这里写图片描述

ROM Code 主要功能如下:

(1)配置设备并初始化主要的外设
(2)建立堆栈
(3)配置开门狗定时器1(设置到三分钟)
(4)配置 PLL 和系统时钟
(5)为下一阶段启动做准备
(6)为下一阶段启动检查启动源(SPL)
(7)把下一启动阶段的 bootloader 代码(MLO)移动到内存中准备运行

ROM Code 针对不同的启动源有不同的启动过程,但最终还是为了把启动源的代码(MLO)搬运至内部 RAM 中运行,AM335X的内部RAM的大小只有128KB(从datasheet上看应该是64KB的Dedicated RAM和64KB的Shared RAM),而且由于各种各样的原因只剩下109KB可用。ROM Code 可以从以下设备中加载SPL:

(A)Memory devices non XIP (NAND/SDMMC)
从这类设备加载SPL时要有Image header(头信息),Image header的长度为8字节,包括加载地址(入口地址)和需要拷贝的SPL image的大小,二者各4字节。ROM Code会根据Image header中的信息将SPL image加载入内存中执行。此处SPL image指MLO文件。

(B)Peripheral devices (UART)
此种启动模式下,ROM Code会将SPL image加载入内部SRAM的0x402f0400地址处并执行,注意此时SPL image不包括头信息。此处SPL image指u-boot-spl.bin文件。

这里我们主要解析下针对 MMC/SD 卡设备,它的启动过程是怎么样的。

(1)初始化 MMC/SD 驱动
(2)检测是内存还是SD卡
(3)配置地址
(4)判断存储设备是 RAW 模式还是 FAT 模式
(5)如果是 RAW 模式就按照参考手册 Table 26-20 所定义的地址搬运代码至内部 RAM 中
(6)如果是 FAT 模式,就读取主引导记录并读取启动扇区查找 MLO 文件,并搬运到 RAM 中执行
这里写图片描述

第二阶段:SPL

第二阶段叫做 SPL,但有些时候也叫 MLO。SPL 是启动 U-Boot 前的一个阶段,并且必须从启动源(MMC、USB、SD、UART等)加载到内部 RAM 中。SPL 只有极少的功能,SPL 主要的职责就是初始化 DDR,时钟等最小系统,以读取 U-Boot 并加载到 DDR 中。

第三阶段:U-Boot

U-boot 主要的工作就是正确加载 Kernel。和 SPL 类似,U-boot 也是要加载下一个阶段的 image,但是 U-Boot 提供了更多外设的支持和更多的调试工具。所以,U-Boot 也要进行各个模块的配置,上述 SPL 配置的部分,除了 DDR 外,U-Boot 也会根据需求重新配置(这里重置主要是U-Boot 是一个开源工程,其要兼容某些特殊的芯片,从而需要做重载)。此外,U-Boot 也会对网口,SD卡等根据需求进行配置。 完成配置后,U-Boot 会从相应的存储器或者外设读取 Kernel,并传递参数给 Kernel,运行 Kernel。

U-Boot 允许用户通过串行终端在内核启动环境中做一些强大的基于命令的控制。用户可以控制很多启动参数和内核启动命令。另外 U-Boot 环境变量是可配置的,这些变量保存在存储媒介的 uEnv.txt 中。 更多内容可以查看 AM335x U-Boot 用户指南。

第四阶段:启动 Linux 内核

uImage 是与描述内核头信息交换过的内核镜像。这个头信息是一个 64kB的信息块,包含了目标架构、操作系统、内核尺寸、入口等信息。U-boot 启动 uImage的时候,头信息会在命令行输出。
这里写图片描述
在读出头文件之后,U-Boot 开始启动 Linux 内核。

其他

AM335x 能从不同的源启动:MMC/SD,NAND,NOR,UART,ETHERNET,USB,SPI和I2C。能从哪个源启动由启动阶段决定。比如,SPL/U-Boot 只能从能被 ROM Code 识别的源启动。 ROM 和 SPL bootloader在内部 RAM 中运行,U-boot 和内核在 DDR 中运行。 更多信息可以看《技术参考指南》的第二章。
这里写图片描述

BeagleBone 启动

BBB 板子上的 AM3335x 处理器上可以通过配置选择不同的接口启动,如数据手册 第二十六章所写。BBB 通过 S2 这个按键选择不同的启动顺序,默认情况下(S2 没有按下)启动过程如下:

(1)MMC1(板载 eMMC)
(2)MMC0(microSD)
(3)UART0
(4)USB0

如果按下 S2 按钮,启动过程如下:

(1)SPI0
(2)MMC0(microSD)
(3)UART0
(4)USB0



这篇关于基于 Beaglebone Black嵌入式linux系统u-boot编译 启动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/808139

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor