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

相关文章

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException: org.junit.Test问题

《解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException:org.junit.Test问题》:本文主要介绍解决tomcat启动时报Junit相... 目录tomcat启动时报Junit相关错误Java.lang.ClassNotFoundException

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将