3、将uboot,kernel,rootfs下载到开发板上

本文介绍了如何使用Hitool工具和tftp网络烧录方式,将uboot、kernel和rootfs下载到Hi3518EV200开发板上。包括了详细的操作步骤及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将uboot,kernel,rootfs下载到开发板上

1、为什么要下载

所谓下载,也称烧录,部署。

1.1、什么是u-boot

Hi3518EV200 单板的 Bootloader 采用 U-boot。
u-boot是一种普遍用于嵌入式系统中的Bootloader,Bootloader是在操作系统运行之前执行的一小段程序,通过它,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的软硬件环境,为最终调用操作系统内核做好准备。Boot Loader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,即开始启动操作系统。系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的Boot Loader程序。

1.2、什么是kernel

烧录完uboot之后,开始烧录kernel。Kerne是指大多数操作系统的核心部分。它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。操作系统内核通常运行进程,并提供进程间的通信。操作系统必须要以内核为基础运行,内核提供最基本的对计算机的操作,并且让计算机底层尽量安全和容易管理。

1.3、 什么是rootfs

根文件系统是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。由于init=/linuxrc,因此,在文件系统挂载后,运行的第一个程序就是根目录下的linuxrc,而这是一个指向/bin/busybox 的链接,也就是说,系统起来后运行的第一个程序就是busybox。 busybox首先将试图解析/etc/inittab来获取进一步的初始化配置信息(参考busybox源代码init/init.c中的parse_inittab()函数)。而事实上,root_qtopia中并没有/etc/inittab这个配置文件,根据busybox的裸机,它将生成默认的配置。其中最重要的一个,就是new_init_action(SYSINIT,INIT_SCRIPT,""),也就决定了接下来初始化的脚本是INIT_SCRIPT所定义的值,这个宏的默认值是"etc/init.d/rcS"。

2、通过Hitool工具烧录uboot

注意:Hitool是基于JaveEE开发的,因此运行前必须安装jre-6u45-windows-i586。注意必须是这个版本,否则不能运行。

  • [ ] (1),打开Hitool,选择对应芯片,点击HiBure
    1174523-20180423132749025-198404265.png

  • [ ] (2),将软件按如下图所设置
    1174523-20180423132909597-1326571030.png
    注意:在HI3518ESDK里面的\package\image_uclibc_hi3518ev200里面提供了u-boot镜像,也可以是自己编译的。

  • [] (3),选中,烧写
    1174523-20180423133832886-703354273.png

  • [] (4),关闭Hitool,将开发板的串口连接到SecurtCRT,重启开发板,打断3s启动进入uboot模式
    1174523-20180423134453534-800250777.png

  • [] (5),print打印默认环境变量
    1174523-20180423134810202-2064306761.png

3、通过tftp网络烧录

此时开发板进入uboot模式

3.1 tftp烧录之前的准备条件

  • [ ] (1),开发板要用串口线,网线连接到PC机上,并用SecurtCRT连接串口。
  • [ ] (2),重启开发板进入u-boot的命令行下
  • [ ] (3),开发板和uboot之间能tftp网络能ping通

  • [ ] (4),准备镜像
    • 步骤1,镜像在osdrv/pub/image_uclibc中,先进入此目录
    • 步骤2,将相关镜像复制到tftpboot目录下
    • cp u-boot-hi3518ev200.bin uImage_hi3518ev200 rootfs_hi3518ev200_64k.jffs2 /tftpboot/ -f
    • cd /tftpboot/
    • ls
    • ls -l
    • cd ..
    • sudo chmod -R 777 tftpboot/
    • cd /tftpboot/
    • ls
    • ls -l
  • [ ] (5),开发板和ubuntu的设置:
    • ubutun:设置桥接到有线网卡,静态分配ip
    • HI3518E进入hisilicon模式[uboot],执行以下命令设置环境变量
        • set bootcmd 'bootm 0x82000000'
        • set bootargs mem=96M console=ttyAMA0,115200
        • set serveip 192.168.1.141
        • set ip 192.168.1.10
        • save
    • ping 192.168.1.141
  • [ ] (6),print
    1174523-20180423161938431-1535929729.png

### 2.2、下载kernel

  • mw.b 0x82000000 ff 0x300000
  • tftp 0x82000000 uImage_hi3518ev200
  • sf probe 0
  • sf erase 0x100000 0x300000
  • sf write 0x82000000 0x100000 0x300000

### 2.3、下载rootfs

  • mw.b 0x82000000 ff 0xc00000
  • tftp 0x82000000 rootfs_hi3518ev200_64k.jffs2
  • sf probe 0
  • sf erase 0x400000 0xc00000
  • sf write 0x82000000 0x400000 0xc00000

### 2.4、设置bootcmd和bootargs以正确启动【此后每次tftpboot目录镜像更新,开发板都会同步跟新镜像】

  • set bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
  • set bootargs mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1024K(boot),3072K(kernel),12288K(rootfs)
  • save
  • reset 【即可重启系统】
    1174523-20180423162105051-104263949.png

转载于:https://www.cnblogs.com/Ocean-Star/p/8916159.html

<think>我们正在讨论如何将程序烧录到开发板上。根据用户的问题,他需要知道烧录程序所需的工具、步骤以及常见问题的解决方法。参考之前提供的引用内容,特别是引用[3]中详细描述了在Linux开发板上的烧录过程,包括使用SD卡和USB两种方式。首先,我们需要明确烧录的对象是程序(可能是编译后的可执行文件)还是整个系统(包括ubootkernel等)。用户的问题中提到了“程序”,但根据上下文(尤其是引用[3]),烧录程序通常是指将编译好的二进制文件(如ubootkernel或应用程序)写入到开发板的存储设备(如eMMC、NANDFlash、SD卡等)中。根据引用[3],烧录过程可以分为两种主要方式:1.SD卡烧录:通常用于烧录uboot,然后利用uboot来烧写其他部分(如kernel)。2.USB烧录:通过USB连接,使用特定的工具(如fastboot)将程序下载开发板的内存中,然后由uboot将程序写入存储设备。此外,烧录程序还可能通过其他方式,例如使用JTAG调试器(如引用[2]中提到的)直接烧录到开发板的闪存中,或者通过网络(如TFTP)进行烧录。下面,我们将详细介绍烧录程序的步骤、工具以及常见问题解决。###烧录程序的步骤和工具####1.确定烧录内容-烧录整个系统(uboot,kernel,rootfs)还是单个应用程序?-对于系统烧录,通常需要将编译好的镜像(如uboot.bin,kernel.img,rootfs.img)烧录到开发板的存储设备中。-对于应用程序,通常需要将编译好的可执行文件复制到开发板的文件系统中(如通过SD卡、U盘、网络等)。####2.选择烧录方式根据开发板支持的烧录方式和可用的工具,选择以下一种或多种方式:-**SD卡烧录**:将镜像文件写入SD卡,然后将SD卡插入开发板,通过设置启动顺序从SD卡启动,再执行烧录命令将镜像写入开发板的内部存储(如eMMC)。-工具:在PC上使用`dd`命令(Linux)或Win32DiskImager(Windows)将镜像写入SD卡。-**USB烧录**:通过USB线连接开发板和PC,使用fastboot工具(开发板需进入fastboot模式)将镜像下载开发板并烧录到指定分区。-工具:PC上安装fastboot工具(AndroidSDK的一部分)。-**JTAG烧录**:通过JTAG调试器连接开发板和PC,使用烧录软件(如CCS中的烧录工具)将程序直接烧录到闪存中。这种方式通常用于烧录bootloader(如uboot)或调试程序。-工具:JTAG调试器(如J-Link)和对应的烧录软件。-**网络烧录**:通过以太网连接,使用TFTP协议下载镜像,然后通过uboot命令烧录到存储设备。-工具:TFTP服务器(PC端),uboot中的tftp命令。####3.具体步骤(以USB烧录为例)引用[3]中详细描述了USB烧录的过程,总结如下:-步骤1:将开发板连接到PC的USB口(通常使用USBOTG口),并让开发板进入烧录模式(如按住某个按键上电,或者通过串口发送命令进入fastboot模式)。-步骤2:在PC上运行烧录工具(如fastboot),检测设备:```fastbootdevices```-步骤3:使用fastboot命令烧录镜像到指定分区。例如,烧录uboot到bootloader分区:```fastbootflashbootloaderuboot.bin```烧录kernel:```fastbootflashkernelkernel.img```烧录文件系统:```fastbootflashsystemrootfs.img```-步骤4:烧录完成后,重启开发板:```fastbootreboot```####4.常见问题解决-**问题1:PC无法识别开发板(fastbootdevices命令无输出)**-解决:检查USB线是否连接正确(使用开发板指定的USB口,通常是OTG口);检查开发板是否进入fastboot模式;检查PC的USB驱动(可能需要安装特定驱动)。-**问题2:烧录过程中出现权限错误**-解决:在Linux系统中,使用sudo执行fastboot命令;在Windows系统中,以管理员身份运行命令行。-**问题3:烧录后系统无法启动**-解决:检查烧录的镜像是否正确(是否针对该开发板编译);检查烧录的分区是否正确(不同开发板的分区表可能不同);检查启动顺序设置(是否从烧录的存储设备启动)。###总结烧录程序到开发板需要根据开发板的具体型号和烧录内容选择合适的方式。常用的方式包括SD卡烧录、USB烧录(fastboot)、JTAG烧录和网络烧录(TFTP)。每种方式都需要相应的工具和步骤。在烧录过程中,可能会遇到设备无法识别、权限问题、烧录后无法启动等问题,需要根据具体情况排查。§§相关问题§§1.如何通过SD卡烧录程序到开发板?2.使用JTAG烧录程序的具体步骤是什么?3.烧录程序后系统无法启动,如何调试?</think>### 如何将程序烧录到开发板 程序烧录是将编译后的可执行文件写入开发板存储设备的过程。根据开发板类型和烧录目标(uboot/kernel/应用程序),方法有所不同。以下是通用步骤和工具: #### 一、烧录工具准备 1. **硬件工具** - USB转串口调试器(连接开发板串口) - USB数据线(用于USB烧录) - SD卡(用于SD卡烧录) - JTAG调试器(如J-Link,用于底层烧录)[^2] 2. **软件工具** - 烧录工具:`fastboot`(USB烧录)、`dd`命令(SD卡烧录)、`OpenOCD`(JTAG烧录) - 串口终端:`minicom`(Linux) 或 `PuTTY`(Windows) - 交叉编译工具链(如arm-linux-gnueabihf) #### 二、烧录流程(以USB和SD卡为例) ```mermaid graph TD A[编译程序] --> B[生成二进制文件] B --> C{选择烧录方式} C -->|USB| D[开发板进入烧录模式] C -->|SD卡| E[复制文件到SD卡] D --> F[PC执行fastboot命令] E --> G[SD卡插入开发板] F --> H[烧录到存储设备] G --> I[开发板从SD卡启动加载] ``` ##### 1. **USB烧录(推荐)** **步骤:** 1. 开发板连接PC,进入烧录模式(通常需按住特定按键上电) 2. PC端安装`fastboot`工具(Android SDK组件) 3. 执行烧录命令: ```bash fastboot devices # 检测设备 fastboot flash bootloader uboot.bin # 烧写uboot fastboot flash kernel zImage # 烧写内核 fastboot flash system rootfs.img # 烧写文件系统 fastboot reboot # 重启 ``` **注意:** 需先通过`x210_usb.bin`初始化DDR,再烧写主程序[^3] ##### 2. **SD卡烧录** **步骤:** 1. 将SD卡插入PC,使用`dd`命令写入引导程序: ```bash sudo dd if=uboot.bin of=/dev/sdX bs=512 seek=1 # sdX为SD卡设备名 ``` 2. 将内核/应用程序复制到SD卡FAT分区 3. SD卡插入开发板,设置启动模式为SD卡优先 4. 上电后通过uboot命令烧写: ```bash # 在uboot命令行中 fatload mmc 0:1 0x30008000 zImage # 从SD卡加载内核到内存 nand erase 0x200000 0x400000 # 擦除NAND分区 nand write 0x30008000 0x200000 0x400000 # 写入NAND ``` #### 三、常见问题解决 1. **设备无法识别** - 检查USB驱动(Linux需`udev`规则) - 尝试不同USB口(优先使用开发板标注的OTG口) 2. **烧录后无法启动** - 确认启动顺序(uboot环境变量`bootcmd`) - 检查二进制文件是否针对该平台编译(如ARMv7 vs ARMv8) 3. **JTAG烧录失败** - 确认JTAG接口电压匹配(3.3V/1.8V) - 检查`OpenOCD`配置文件与开发板匹配[^2] 4. **空间不足** - 使用`fdisk`调整分区大小 - 压缩文件系统(如`squashfs`) > **关键点:** 烧录本质是将二进制数据写入存储设备的特定物理地址,需严格遵循芯片手册的地址映射关系[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值