TI jacinto U-Boot – 上
3.1.1. U-Boot用户指南 3.1.1.1. 概述 介绍了本文档U-Boot Linux以下平台上核心版本的一般用法: 32位平台 ? AM335x GP EVM ? AM335x EVM-SK ? AM335x ICE ? BeagleBone White ? BeagleBone Black ? DRA76x EVM ? DRA74x EVM ? DRA72x EVM ? DRA71x EVM ? AM437x GP EVM ? AM43xx ePOS EVM ? AM437x EVM-SK ? AM437x IDK ? AM574x IDK ? AM572x GP EVM ? AM572x IDK ? AM571x IDK ? 66AK2H EVM ? K2K EVM ? K2Ex EVM ? K2L EVM ? K2G GP EVM ? K2G ICE EVM ? OMAP-L138 LCDK 64-bit platforms ? AM65x EVM ? AM65x IDK ? J721E EVM ? J7200 EVM 3.1.1.2. 一般信息 3.1.1.2.1. 获取U-Boot源代码 访问U-boot最简单的方法是下载和安装处理器SDK Linux。一旦安装,U-Boot包含源代码SDK的board support目录中。为了方便起见,源代码还包括U-Boot的git仓库,包括提交历史记录。或者,可以直接从GIT获取U-Boot源代码。 3.1.1.2.2. 在32个平台上建立和引导流量 在构建过程中强烈建议使用单独的对象目录。这是通过的O= parameter完成。我们还建议您使用与配置目标名称相同的输出目录名称。这样,如果您使用多个配置目标,就很容易知道哪个文件夹包含您感兴趣的内容u-boot二进制文件。 设置工具链路径 我们强烈建议使用它U-Boot版本对应Linux带有核心版本的工具链。
export PATH=$HOME/<TOOLCHAIN_PATH>/bin:$PATH Cleaning the Sources
若未使用单个对象目录:
$ make CROSS_COMPILE=arm-linux-gnueabihf- distclean
如果使用‘O=am335x_evm作为对象目录: $ rm -rf ./am335x_evm 编译MLO和u-boot 同时进行u-boot和SPL结构。但是,您必须首先建立正在使用的板配置。使用下表来决定使用哪个defconfig进行配置:
Board SD Boot eMMC Boot NAND Boot UART Boot Ethernet Boot USB Ethernet Boot USB Host Boot SPI Boot AM335x GP EVM am335x_evm_defconfig am335x_evm_defconfig am335x_evm_defconfig am335x_evm_defconfig am335x_evm_defconfig AM335x EVM-SK am335x_evm_defconfig am335x_evm_defconfig am335x_evm_defconfig AM335x ICE am335x_evm_defconfig am335x_evm_defconfig BeagleBone Black am335x_evm_defconfig am335x_evm_defconfig am335x_evm_defconfig BeagleBone White am335x_evm_defconfig am335x_evm_defconfig AM437x GP EVM am43xx_evm_defconfig am43xx_evm_defconfig am43xx_evm_defconfig am43xx_evm_defconfig am43xx_evm_defconfig am43xx_evm_usbhost_boot_defconfig AM437x EVM-Sk am43xx_evm_defconfig am43xx_evm_usbhost_boot_defconfig AM437x IDK am43xx_evm_defconfig am43xx_evm_qspiboot_defconfig (XIP) AM437x ePOS EVM am43xx_evm_defconfig am43xx_evm_defconfig am43xx_evm_usbhost_boot_defconfig AM572x GP EVM am57xx_evm_defconfig am57xx_evm_defconfig AM572x IDK am57xx_evm_defconfig AM571x IDK am57xx_evm_defconfig DRA74x/DRA72x/DRA71x EVM dra7xx_evm_defconfig dra7xx_evm_defconfig dra7xx_evm_defconfig (DRA71x EVM only) dra7xx_evm_defconfig(QSPI) K2HK EVM k2hk_evm_defconfig k2hk_evm_defconfig k2hk_evm_defconfig k2hk_evm_defconfig K2L EVM k2l_evm_defconfig k2l_evm_defconfig k2l_evm_defconfig K2E EVM k2e_evm_defconfig k2e_evm_defconfig k2e_evm_defconfig K2G GP EVM k2g_evm_defconfig k2g_evm_defconfig k2g_evm_defconfig k2g_evm_defconfig K2G ICE k2g_evm_defconfig OMAP-L138 LCDK omapl138_lcdk_defconfig omapl138_lcdk_defconfig
然后:
在这个例子中使用am335x_evm’ and ‘AM335x GP EVM’
$ make CROSS_COMPILE=arm-linux-gnueabihf- O=am335x_evm am335x_evm_defconfig $ make CROSS_COMPILE=arm-linux-gnueabihf- O=am335x_evm
请注意,由于社区存在,因此没有列出给定平台的所有可能目标TI其他不支持的建设目标。要找到这些,请阅读‘boards.cfg查找上述生成目标。请注意,将使用主配置文件include/configs下的其他文件,如#include语句所示。 启动流程 引导嵌入式平台Linux内核不像简单地将程序计数器指向内核并使处理器运行那么简单。本节将回顾指导内核和设备运行前必须运行的四个指导加载程序软件阶段。 AM335x应用程序处理器是复杂的硬件,但内部RAM有限(例如128KB)。由于RAM数量有限,需要多个引导加载程序阶段。这些引导加载程序系统地解锁了设备的所有功能,使设备的所有复杂性都能用于核心。 引导加载程序有四个不同的阶段:
- ROM Codebr> 第一阶段引导加载程序被安置在设备的ROM中。ROM代码是设备启动或重启(POR)后自动运行的第一个代码块。ROM引导加载程序代码硬编码到设备中,用户不能更改。正因为如此,理解ROM代码到底在做什么是很重要的。 ROM代码有两个主要功能: •设备的配置和主要外设的初始化,如堆栈设置,配置看门狗定时器(参见TRM的详细信息),以及PLL和系统时钟配置 •通过检查下一阶段引导加载程序(SPL)的引导源,以及将实际的下一阶段引导加载程序代码加载到内存并启动它,为下一个引导加载程序准备好设备 ROM代码将为第二阶段引导加载程序搜索的引导设备列表是由启动时设备SYSBOOT引脚上设置的电压水平配置的。这些引脚也设置了其他的启动参数(例如期望的晶体频率,外部存储器的总线宽度)。有关SYSBOOT引脚和相关的启动参数的更多信息,请参见设备TRM。
- SPL or MLO 第二阶段引导加载程序称为SPL(辅助程序加载程序),但有时也称为MLO(MMC卡加载程序)。SPL是U-Boot的第一阶段,必须从一个引导源加载到内部RAM中。SPL的配置或用户交互非常有限,主要用于初始化外部DDR内存并为下一个引导加载程序阶段(U-boot)设置引导过程。
- U-Boot U-Boot允许通过串行终端对内核引导环境进行强大的命令控制。用户可以控制许多参数,比如引导参数和内核引导命令。U-Boot环境变量也可以配置。这些环境变量存储在存储介质上的uEnv.txt文件中,或者直接存储在基于闪存的内存中(如果这样配置的话)。可以分别使用env print, env set, and env save命令查看、修改和保存这些环境变量。U-Boot也是一个非常有用的工具,可以编程和操作广泛的外部内存设备,以及在自定义板启动过程中提供帮助。
- Linux Kernel zImage是压缩后的内核映像,包含了描述内核的头信息。这个头文件包括目标架构、操作系统、内核大小、入口点等。内核映像的加载通常通过使用存储在U-Boot环境中的脚本来执行(所有的脚本都以bootcmd ENV变量开始,该变量在自动引导倒计时过期后执行,或者在U-Boot提示符下手动输入引导命令)。这还涉及将特定于板的设备树blob(DTB)作为参数传递给U-Boot的bootz命令,该命令将提取并启动实际内核。 3.1.1.2.3. 64位平台上的构建和引导流程(基于K3体系结构) 为了在基于K3的平台上构建U-Boot,需要从TI处理器SDK中获取几个预构建的映像。点击这里下载并安装SDK。 TI-u-boot包含在SDK的
/board support中。确保u-boot版本与release-specific-build-information-u-boot版本匹配。 设置工具链路径 我们强烈建议使用与此U-Boot版本相对应的Linux核心版本附带的工具链。例如:
export PATH=$HOME/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin:$PATH
export PATH=$HOME/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin:$PATH
编译 R5 and ARM64 images 使用下表来决定使用哪个defconfig进行配置:
Board SD/eMMC Boot UART boot OSPI boot Hyper Flash USB DFU
AM65x EVM/IDK am65x_evm_r5_defconfig am65x_evm_a53_defconfig am65x_evm_r5_defconfig am65x_evm_a53_defconfig am65x_evm_r5_defconfig am65x_evm_a53_defconfig
J721E EVM j721e_evm_r5_defconfig j721e_evm_a72_defconfig j721e_evm_r5_defconfig j721e_evm_a72_defconfig j721e_evm_r5_defconfig j721e_evm_a72_defconfig j721e_evm_r5_defconfig j721e_evm_a72_defconfig j721e_evm_r5_defconfig j721e_evm_a72_defconfig
J7200 EVM j7200_evm_r5_defconfig j7200_evm_a72_defconfig j7200_evm_r5_defconfig j7200_evm_a72_defconfig
为AM65x EVM/IDK构建引导加载程序
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am65x_evm_r5_defconfig O=<output directory>/r5
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- O=<output directory>/r5
A53
$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- am65x_evm_a53_defconfig O=<output directory>/a53
$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- ATF=<path to tisdk>/board-support/prebuilt-images/bl31.bin TEE=<path to tisdk>/board-support/prebuilt-images/bl32.bin O=<output directory>/a53
为J721E EVM构建引导加载程序
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- j721e_evm_r5_defconfig O=<output directory>/r5
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- O=<output directory>/r5
A72
$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- j721e_evm_a72_defconfig O=<output directory>/a53
$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- ATF=<path to tisdk>/board-support/prebuilt-images/bl31.bin TEE=<path to tisdk>/board-support/prebuilt-images/bl32.bin DM=<path to tisdk>/board-support/prebuilt-images/ipc_echo_testb_mcu1_0_release_strip.xer5f O=<output directory>/a72
为J7200 EVM构建引导加载程序
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- j7200_evm_r5_defconfig O=<output directory>/r5
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- O=<output directory>/r5
A72
$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- j7200_evm_a72_defconfig O=<output directory>/a53
$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- ATF=<path to tisdk>/board-support/prebuilt-images/bl31.bin TEE=<path to tisdk>/board-support/prebuilt-images/bl32.bin DM=<path to tisdk>/board-support/prebuilt-images/ipc_echo_testb_mcu1_0_release_strip.xer5f O=<output directory>/a72
$ cd <path to K3-image-gen project>
$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- SOC=j7200 ROM_COMBINED_IMAGE=1 SBL=<path to tisdk>/board-support/prebuilt-images>/u-boot-spl.bin
依赖项目位置 •K3-image-gen (用于生成tiboot3.bin和sysfw.itb)项目位于这里 •linux固件(用于设备特定的ti-dm和ti-sysfw二进制文件)项目位于这里 目标映像 复制下面的映像到SD卡的引导分区和引导。格式化SD卡的说明可以在这里找到。
AM65x
• <output directory>/r5目录下的tiboot3.bin
•<output directory>/a53目录下的tispl.bin, u-boot.img
• <path to tisdk>/board-support/prebuilt-images/目录下的sysfw.itb
J721E
• <output directory>/r5目录下的tiboot3.bin
• <output directory>/a72 目录下的tispl.bin, u-boot.img
• <path to tisdk>/board-support/prebuilt-images/目录下的sysfw.itb
J7200型
• <path to K3-image-gen>目录下的tiboot3.bin(这是tiboot3.bin 和 sysfw.itb)
• <output directory>/a72 目录下的tispl.bin, u-boot.img
映像格式
•tiboot3.bin
+-----------------------+
| X.509 |
| Certificate |
| +-------------------+ |
| | | |
| | R5 | |
| | u-boot-spl.bin | |
| | | |
| +-------------------+ |
| | | |
| | FIT header | |
| | +---------------+ | |
| | | | | |
| | | DTB 1...N | | |
| | +---------------+ | |
| +-------------------+ |
+-----------------------+
• tispl.bin
+-----------------------+
| |
| FIT HEADER |
| +-------------------+ |
| | | |
| | ARM64 ATF | |
| +-------------------+ |
| | | |
| | ARM64 OPTEE | |
| +-------------------+ |
| | | |
| | ARM64 SPL | |
| +-------------------+ |
| | | |
| | SPL DTB 1...N | |
| +-------------------+ |
+-----------------------+
• sysfw.itb
+-----------------------+
| |
| FIT HEADER |
| +-------------------+ |
| | | |
| | sysfw.bin | |
| +-------------------+ |
| | | |
| | board config | |
| +-------------------+ |
| | | |
| | PM config | |
| +-------------------+ |
| | | |
| | RM config | |
| +-------------------+ |
| | | |
| | Secure config | |
| +-------------------+ |
+-----------------------+
启动流程 在基于K3体系结构的设备上,ROM只支持通过MCU(R5)引导。这意味着引导加载程序必须运行在R5内核上。为了满足这一约束,保证画面安全,加快启动时间,软件启动架构设计如下:
+------------------------------------------------------------------------+
| DMSC | R5 | ARM64 |
+------------------------------------------------------------------------+
| +--------+ | | |
| | Reset | | | |
| +--------+ | | |
| : | | |
| +--------+ | +-----------+ | |
| | *ROM* |----------|-->| Reset rls | | |
| +--------+ | +-----------+ | |
| | | | : | |
| | ROM | | : | |
| |services| | : | |
| | | | +-------------+ | |
| | | | | *R5 ROM* | | |
| | | | +-------------+ | |
| | |<---------|---|Load and auth| | |
| | | | | tiboot3.bin | | |
| | | | +-------------+ | |
| | | | : | |
| | | | : | |
| | | | : | |
| | | | +-------------+ | |
| | | | | *R5 SPL* | | |
| | | | +-------------+ | |
| | | | | Load | | |
| | | | | sysfw.itb | | |
| | Start | | +-------------+ | |
| | System |<---------|---| Start | | |
| |Firmware| | | SYSFW | | |
| +--------+ | +-------------+ | |
| : | | | | |
| +---------+ | | Load | | |
| | *SYSFW* | | | system | | |
| +---------+ | | Config data | | |
| | |<--------|---| | | |
| | | | +-------------+ | |
| | | | | | | |
| | | | | DDR | | |
| | | | | config | | |
| | | | +-------------+ | |
| | | | | | | |
| | |<--------|---| Start A53 | | |
| | | | | and Reset | | |
| | | | +-------------+ | |
| | | | | +-----------+ |
| | |---------|-----------------------|---->| Reset rls | |
| | | | | +-----------+ |
| | DMSC | | | : |
| |Services | | | +-----------+ |
| | |<--------|-----------------------|---->|*ATF/OPTEE*| |
| | | | | +-----------+ |
| | | | | : |
| | | | | +-----------+ |
| | |<--------|-----------------------|---->| *A53 SPL* | |
| | | | | +-----------+ |
| | | | | | Load | |
| | | | | | u-boot.img| |
| | | | | +-----------+ |
| | | | | : |
| | | | | +-----------+ |
| | |<--------|-----------------------|---->| *U-Boot* | |
| | | | | +-----------+ |
| | | | | | prompt | |
| | | | | +-----------+ |
| +---------+ | | |
| | | |
+------------------------------------------------------------------------+
在这里,DMSC充当主服务器并提供所有关键服务。R5/ARM64请求DMSC完成这些服务,如上图所示。 3.1.1.2.4. U-Boot环境 请注意,在许多电路板上,我们在系统启动期间修改了各种变量的环境,如board\u name和if unset,ethaddr。当我们恢复默认值时,一些变量将变得未设置,这可能导致其他事情无法工作,例如依赖于这些运行时设置变量的findfdt。 恢复默认值 可以将U-Boot环境变量集重置为其默认值,如果需要,将其保存到存储环境的位置(如果适用)。当u-boot版本从升级或降级更改时,还需要恢复默认设置。为此,请发出以下命令:
U-Boot # env default -f -a
U-Boot # saveenv
网络环境 使用USB-Ethernet dongle时,必须在环境中设置有效的MAC地址。要创建有效地址,请阅读。然后发出以下命令:
U-Boot # setenv usbethaddr value:from:link:above
您可以使用printenv命令查看是否已经设置了usbethaddr. 然后启动USB子系统:
U-Boot # usb start
U-Boot的默认行为是利用DHCP服务器在用户发出DHCP命令时传递给我们的所有信息。这将包括dhcp参数next-server,它指示通过TFTP从哪里获取文件。但是,有时网络上的dhcp服务器提供了不正确的信息,您无法修改服务器。在这种情况下,以下步骤可能会有帮助:
U-Boot # setenv autoload no
U-Boot # dhcp
U-Boot # setenv serverip correct.server.ip
U-Boot # tftp
另一种方法是使用tftp命令的完整语法:
U-Boot # setenv autoload no
U-Boot # dhcp
U-Boot # tftp ${loadaddr} server.ip:fileName
3.1.1.2.5. 可用于映像下载的RAM
要知道可用于下载映像或其他用途的RAM数量,请使用bdinfo命令。
=> bdinfo
arch_number = 0x00000000
boot_params = 0x80000100
DRAM bank = 0x00000000
-> start = 0x80000000
-> size = 0x7F000000
baudrate = 115200 bps
TLB addr = 0xFEFF0000
relocaddr = 0xFEF30000
reloc off = 0x7E730000
irq_sp = 0xFCEF8880
sp start = 0xFCEF8870
Early malloc usage: 890 / 2000
在引导之后,U-Boot重新定位自己(以及它的各种保留的RAM区域),并将自己放置在可用RAM的末端(从上面的bdinfo输出中的relocaddr开始)。只有堆栈位于该区域之前。栈顶的地址在bdinfo输出的sp start中,并向下增长。用户应该至少为堆栈预留1MB左右的内存,所以在上面的输出示例中,[0x80000000, 0xFCE00000]范围内的RAM是可以安全使用的。 3.1.1.2.6 设备树 关于设备树的说明。现在,所有受支持的板都需要使用设备树来引导。为了在受支持的平台中实现这一点,在U-Boot环境中有一个命令findfdt,它将fdtfile变量设置为要使用的设备树的名称,就像在内核源代码中找到的那样。在Keystone-2系列设备(K2H/K/E/L/G)中,每个平台由name_fdt变量指定。设备树应该从与内核相同的介质和相同的相对路径加载。 3.1.1.3. USB设备固件升级(DFU) 在使用USB设备固件升级(DFU)时,无论要写入的介质和使用的板是什么,都需要记住一些常规事项。首先,您需要在主机上安装一个dfu-util程序的副本。如果您的发行版没有提供此软件包,则需要从源代码构建它。其次,下面的示例假设一个单板插入到主机PC中。如果插入了多个设备,则需要使用dfu-util提供的用于指定要使用的单个设备的选项。最后,要通过DFU为给定的存储设备编程,请参阅正在使用的存储设备一节。 3.1.1.3.1 USB外设启动模式(SPL-DFU支持) USB外设引导模式用于通过使用SPL-DFU功能的USB接口进行引导。这里概述的步骤可以在支持USB外设引导模式的平台上使用。
- 在u-boot中启用SPL-DFU特性,并构建MLO/u-boot二进制文件。
- 使用主机PC上的dfu-util加载MLO和u-boot.img。
- u-boot启动后,使用u-boot中的DFU命令将主机PC的二进制映像(使用DFU -utils工具)flash到eMMC,或QSPI到fresh/factory board。 •这里提供的例子是dra7xx平台。 使用默认的“dra7xx_evm_defconfig”来构建spl/u-boot-spl.bin, u-boot.img。
host$ make dra7xx_evm_defconfig
host$ make menuconfig
select SPL/DFU support
menuconfig->SPL/TPL--->
..
[*] Support booting from RAM
[*] Support USB Gadget drivers
[ ] Support USB Ethernet drivers
[*] Support DFU (Device Firmware Upgrade)
DFU device selection (RAM device) -->
Unselect CONFIG_HUSH_PARSER
menuconfig--->Command Line interface
[*] Support U-boot commands
[ ] Use hush shell
•构建spl/u-boot-spl.bin and u-boot.img
host$ make
J721E EVM上的USB外设引导模式(SPL-DFU引导模式) •将SYSBOOT开关设置为USB外设引导模式(有关引导开关的详细信息,请参阅J721E TRM的初始化章节) •确保USB0端口处于UFP/DRP模式:SW3[3:4] = 01 or 1x •通过USB电缆将EVM的TypeC端口(USB0端口)连接到PC •给单板上电 在主机端:
host$ sudo dfu-util -l
This will show the following DFU entities:
Found DFU: [0451:6163] ver=0200, devnum=50, cfg=1, intf=0, path="3-2", alt=1, name="SocId", serial="01.00.00.00"
Found DFU: [0451:6163] ver=0200, devnum=50, cfg=1, intf=0, path="3-2", alt=0, name="bootloader", serial="01.00.00.00"
Send boot images in this order: tiboot3.bin -> sysfw.itb -> tispl.bin -> u-boot.img.
host$ sudo dfu-util -R -a bootloader -D tiboot3.bin
host$ sudo dfu-util -l
Found DFU: [0451:6163] ver=0224, devnum=51, cfg=1, intf=0, path="3-2", alt=0, name="sysfw.itb", serial="UNKNOWN"
host$ sudo dfu-util -R -a sysfw.itb -D sysfw.itb
host$ sudo dfu-util -l
Found DFU: [0451:6163] ver=0224, devnum=52, cfg=1, intf=0, path="3-2", alt=1, name="u-boot.img", serial="UNKNOWN"
Found DFU: [0451:6163] ver=0224, devnum=52, cfg=1, intf=0, path="3-2", alt=0, name="tispl.bin", serial="UNKNOWN"
host$ sudo dfu-util -R -a tispl.bin -D tispl.bin
host$ sudo dfu-util -R -a u-boot.img -D u-boot.img
此时,单板应该引导到U-Boot提示符。 请注意 J721E Rev E2及以前的单板不支持此模式。 3.1.1.4 网络(有线或USB客户端) 本节介绍如何配置网络,并使用网络加载文件,然后使用通过NFS挂载的根文件系统引导Linux内核。此时,在支持的硬件上执行这些操作不需要U-Boot的特殊构建。 3.1.1.4.1. 从网络引导U-Boot 在某些情况下,由于ROM支持,我们支持通过网络加载SPL和U-Boot。在某些情况下,可能需要U-Boot的特殊构建。另外,DHCP服务器需要通过tftp向目标回复要获取的文件。为了方便起见,ROM填写vendor-class-identifier DHCP字段,并在下表中列出这些值。最后,您将需要使用spl/u-boot-spl.bin and u-boot.img文件来启动。 注意 仅在以下平台上支持从网络引导U-Boot/SPL。
Board make target Supported interfaces ROM vendor-class-identifier value SPL vendor-class-identifier value
AM335x GP EVM am335x_evm CPSW ethernet DM814x ROM (PG1.0) or AM335x ROM (PG2.0 and later) AM335x U-Boot SPL
AM335x GP EVM (PG2.0 and later) am335x_evm SPL and U-Boot via USB RNDIS AM335x ROM AM335x U-Boot SPL
AM335x GP EVM (PG1.0) am335x_evm SPL via UART, U-Boot via USB RNDIS N/A AM335x U-Boot SPL
AM43xx EVM am43xx_evm CPSW ethernet AM43xx ROM AM43xx U-Boot SPL
AM43xx EVM (PG1.2 and later) am43xx_evm SPL and U-Boot via USB RNDIS AM43xx ROM AM43xx U-Boot SPL
如果使用ISC dhcpd,示例主机条目如下所示:
host am335x_evm {
hardware ethernet de:ad:be:ee:ee:ef;
# Check for PG1.0, typically CPSW
if substring (option vendor-class-identifier, 0, 10) = "DM814x ROM" {
filename "u-boot-spl.bin";
# Check for PG2.0, CPSW or USB RNDIS
} elsif substring (option vendor-class-identifier, 0, 10) = "AM335x ROM" {
filename "u-boot-spl.bin";
} elsif substring (option vendor-class-identifier, 0, 17) = "AM335x U-Boot SPL" {
filename "u-boot.img";
} else {
filename "zImage-am335x-evm.bin";
}
}
请注意,在工厂类型设置中,可以在子网声明中执行子字符串测试,以设置子网的默认文件名值,并在主机条目中覆盖(如果需要)。 如果你已经从你的系统中删除了NetworkManager(这在大多数发行版中不是默认的),你需要配置你的/etc/network/interfaces文件:
allow-hotplug usb0
iface usb0 inet static
address 192.168.1.1
netmask 255.255.255.0
post-up service isc-dhcp-server reload
如果使用NetworkManager,则需要创建两个文件。首先,以root用户身份创建/etc/NetworkManager/system-connections/AM335x USB RNDIS(并使用\转义空间),内容如下:
[802-3-ethernet]
duplex=full
mac-address=AA:BB:CC:11:22:33
[connection]
id=AM335X USB RNDIS
uuid=INSERT THE CONTENTS OF 'uuidgen' HERE
type=802-3-ethernet
[ipv6]
method=ignore
[ipv4]
method=manual
addresses1=192.168.1.1;16;
Seccond为root,并确保执行权限,创建/etc/NetworkManager/dispatcher.d/99am335x-dhcp-server
#!/bin/sh
IF=$1
STATUS=$2
if [ "$IF" = "usb0" ] && [ "$STATUS" = "up" ]; then
service isc-dhcp-server reload
fi
这些步骤可以在ubuntu12.04上看到,设置为基于AM335x的平台进行网络引导. 3.1.1.4.2. 多个接口 在某些电路板上,例如,当我们同时拥有有线接口和USB RNDIS gadget以太网时,可能需要改变默认的U-Boot行为,即在它知道的每个接口上循环