RK3568 SDK包中各文件夹的作用:
Linux 系统要启动需要通过 bootloader 程序引导,也就说芯片上电以后先运行一段 bootloader程序。这段 bootloader程序会先初始化 DDR等外设,然后将 Linux内核从 flash (NAND NOR FLASH SD EMMC 等 )拷贝到 DDR 中,最后启动 Linux 内核。当然了,bootloader 的实际工作要复杂的多,但是它最主要的工作就是启动 Linux 内核, bootloader 和 Linux 内核的关系就跟 PC 上的 BIOS 和 Windows 的关系一样, bootloader 就相当于 BIOS。所以我们要先搞定 bootloader,很庆幸,有很多现成的 bootloader 软件可以使用,比如 U-Boot、 vivi、 RedBoot 等等,其中以 U-Boot 使用最为广泛,为了方便书写,本教程会将 U-Boot 写为 uboot。
uboot 的全称是 Universal Boot Loader, uboot 是一个遵循 GPL 协议的开源软件, uboot是一个裸机代码,可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、 USB等高级功能。
一般来说,我们不直接用uboot官方源码,官方的源码是给芯片厂商使用的,我们用厂商优化修改后的uboot包
RK3568的uboot包在SDK的u-boot文件夹下。
可以在SDK文件夹下使用 ./build.sh uboot 编译,然后使用 rkflash脚本烧写。
U-Boot的启动过程需要在串口中查看,所以要连接MobaXterm工具,然后复位开发板,然后按住“CTRL-C”键,然后进入uboot命令行模式。
uboot打印信息如下:
setenv 和 saveenvmd:显示指定地址内存值nm: 修改指定地址的内存值mm: 修改指定地址的内存值。命令也是修改指定地址内存值的,使用 mm修改内存值的时候地址会自增,而使用 nm命令的话地址不会自增。mw: 使用一个指定的数据填充一段内存cp :数据拷贝。是数据拷贝命令,用于将 DRAM中的数据从一段内存拷贝到另一段内存中,或者把NorFlash中的数据拷贝到 DRAMcmp: 比较命令,是比较命令,用于比较两段内存的数据是否相等setenv ipaddr 192.168.6.38
setenv ethaddr b8:ae:1d:01:01:00 //有的 uboot会默认设置 ethaddr,然后禁止修改 RK3568是禁止修的,所以这个我们可以不用设置
setenv gatewayip 192.168.6.1
setenv netmask 255.255.255.0
setenv serverip 192.168.6.227
saveenv
网络操作命令如下:
ping: 注意!只能在 uboot中 ping其他的机器,其他机器不能 ping uboot,因为 uboot没有对 ping命令 做 处理,如果用其他的机器 ping uboot的话会失败!
dhcp: dhcp用于从路由器获取 IP地址,前提是开发板得连接到路由器上的,如果开发板是和电脑直连的,那么 dhcp命令就会失效。直接输入 dhcp命令即可通过路由器获取到 IP地址,
nfs: nfs(Network File System)网络文件系统,通过 nfs可以在计算机之间通过网络来分享资源
tftp: tftp命令的作用和 nfs命令一样,都是用于通过网络下载东西到 DRAM中,只是 tftp命令使用的是 TFTP协议, Ubuntu主机作为 TFTP服务器。因此需要在 Ubuntu上搭建 TFTP服务器,需要安装 tftp-hpa和 tftpd-hpa
uboot支持 EMMC和 SD卡,因此也要提供 EMMC和 SD卡的操作命令。一般认为 EMMC和 SD卡是同一个东西,所以没有特殊说明,本教程统一使用
指令详情
| 指令 | 描述 |
|---|---|
| mmc info | 输出MMC设备信息 |
| mmc read | 读取MMC中的数据 |
| mmc write | 向MMC设备写入数据。 |
| mmc rescan | 扫描MMC设备。 |
| mmc part | 列出MMC设备的分区。 |
| mmc dev | 切换MMC设备 |
| mmc list | 列出当前有效MMC设备 |
| mmc hwpartition | 设置MMC设备分区 |
uboot有 ext2和 ext4这两种格式的文件系统的操作命令, RK3568的系统镜像都是 ext4格式的
指令详情
| 指令 | 描述 |
|---|---|
| ext4ls | 命令用于查询 EXT4格式设备的目录和文件信息 |
| ext4load | 命令用于将指定的文件读取到 DRAM |
uboot的本质工作是引导 Linux,所以 uboot肯定有相关的 boot(引导 )命令来启动 Linux。常用的跟 boot有关的命令有: boot_fit和 boot。
指令详情
| 指令 | 描述 |
|---|---|
| boot_fit | 大家如果学过 I.MX6U或者 STM32MP1的话,应该知道 uboot使用 bootm或者 bootz这两个命令启动内核,需要提供 Linux编译出来的 zImage或 uImage以及设备树文件,然后使用bootm或 bootz启动。但是 RK3568最终的系统烧写文件只有一个 boot.img Image和设备树文件全部打包进 boot.img这一个文件里面,所以就不能用 bootm或 bootz,要用到 boot_fit |
| boot/bootd | 命令,此命令也是用来启动 Linux系统的,只是 boot会读取环境变量 bootcmd来启动 Linux系统, bootcmd是一个很重要的环境变量!其名字分为“ |
指令详情
| 指令 | 描述 |
|---|---|
| reset | 复位重启 |
| go | 跳转到指定地址执行应用 |
| run | 运行环境变量中定义的命令 |
MII命令是网络相关命令,主要用于读取网络 PHY芯片寄存器,在 uboot中调试网络 PHY芯片的时候非常有用
指令详情
| 指令 | 描述 |
|---|---|
| mii device | 列出可用设备 |
| mii device | 设置当前设备 |
| mii info | 显示设备信息 |
| mii read | 读取指定地址的数据 |
| mii write | 在指定位置写数据 |
| mii dump | 直接打印出 PHY的 0~5寄存器值,输入如下命令: |