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

相关文章

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Linux之软件包管理器yum详解

《Linux之软件包管理器yum详解》文章介绍了现代类Unix操作系统中软件包管理和包存储库的工作原理,以及如何使用包管理器如yum来安装、更新和卸载软件,文章还介绍了如何配置yum源,更新系统软件包... 目录软件包yumyum语法yum常用命令yum源配置文件介绍更新yum源查看已经安装软件的方法总结软

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是