基于 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

相关文章

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录