什么是低代码?低代码开发平台靠谱吗?低代码平台优缺点
1296
2022-05-30
1. 前言
U-boot是一种开源bootloader, 作用是用来引导操作,以及给开发人员提供测试调试工具。本身算是个精简的linux系统,主要是负责硬件的初始化和引导,本身带有一些工具,作为引导程序,常作为嵌入式设备的引导。当真正的系统开始运行的时候U-boot就把管理权限交了出去。
选择U-Boot的理由:
① 开放源码;
② 支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;
③ 支持多个处理器系列,如PowerPC、ARM、x86、MIPS;
④ 较高的可靠性和稳定性;
⑤ 高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;
⑥ 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;
⑦ 较为丰富的开发调试文档与强大的网络技术支持;
U-BOOT工作模式
U-Boot的工作模式有启动加载模式和下载模式。启动加载模式是Bootloader的正常工作模式,嵌入式产品发布时,Bootloader必须工作在这种模式下,Bootloader将嵌入式操作系统从FLASH中加载到SDRAM中运行,整个过程是自动的。下载模式就是Bootloader通过某些通信手段将内核映像或根文件系统映像等从PC机中下载到目标板的FLASH中。用户可以利用Bootloader提供的一些命令接口来完成自己想要的操作。
当前测试uboot命令的开发板是友善之臂tin441,使用三星的EXYNOS4412,本篇文章重点是介绍uboot命令行的命令功能,用法,使用的uboot版本是2010.12,是友善之臂官方提供的uboot。
2. UBOOT命令介绍
2.1 帮助命令–help
查看当前的UBOOT支持那些命令。
TINY4412 # help ? - alias for 'help' base - 打印一组地址偏移量 bdinfo - 开发板的信息结构 boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootelf - Boot from an ELF image in memory bootm - 从内存启动应用程序 bootp - 通过使用BOOTP / TFTP协议的网络引导映像 bootvx - Boot vxWorks from an ELF image chpart - 更改活动分区 cmp - memory compare coninfo - print console devices and information cp - 内存拷贝 crc32 - 检验和的计算 dcache - 启用或禁用数据缓存 dnw - dnw - USB设备进行初始化并准备好接受Windows server(特定的) echo - echo args to console editenv - 修改环境变量 emmc - 打开/关闭eMMC引导分区 env - 环境处理命令 exit - 退出脚本 ext2format- ext2 ext2format——磁盘格式 ext2load- 从Ext2文件系统加载二进制文件 ext2ls - 在一个目录列表文件(默认/) ext3format- ext3 ext3format——磁盘格式 false - 什么也不做,但没有成功 fastboot- fastboot——使用USB fastboot协议 fatformat- FAT32 fatformat——磁盘格式 fatinfo - fatinfo——打印文件系统的信息 fatload - fatload——从dos加载二进制文件的文件系统 fatls - 一个目录列表文件(默认/) fdisk - fdisk for sd/mmc. go - 在“addr”启动应用程序 help - 打印命令描述/使用帮助 icache - enable or disable instruction cache iminfo - print header information for application image imxtract- extract a part of a multi-image itest - return true/false on integer compare loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing address) mmc - MMC子系统 mmcinfo - mmcinfo
2.2 查看具体命令的使用方法–help
格式:
help <你想要查的指令>
或者 ? <你想要查的指令> ,
甚至 h <你想要查的指令缩写>。
TINY4412 # help sleep sleep - 延迟执行一段时间 Usage: sleep N - 延迟执行N秒(N是_decimal_ ! ! !)
2.3 打印环境变量–printenv
TINY4412 # printenv baudrate=115200 bootargs=root=/dev/nfs nfsroot=192.168.18.3:/work/rootfs ip=192.168.18.123:192.168.18.3:192.168.18.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200 bootcmd=movi read kernel 0 40008000;movi read rootfs 0 41000000 400000;bootm 40008000 41000000 bootdelay=3 ethaddr=00:40:5c:26:0a:5b gatewayip=192.168.0.1 ipaddr=192.168.0.20 netmask=255.255.255.0 serverip=192.168.0.10 Environment size: 416/16380 bytes
baudrate: 当前的波特率。 一般不修改。
bootcmd: 启动命令。
bootdelay:启动命令 bootcmd 延时执行的时间。
ethaddr: 网卡 MAC 地址。
gatewayip:网关 IP 地址。
ipaddr: 开发板 IP 地址。
netmask: 子网掩码。
serverip: 服务器 IP(一般是 PC 的 IP,给开发板提供各种网络服务的主机的 IP)
bootargs: u-boot 传递给操作系统内核的启动参数。(很重要)
使用示例
打印指定的环境变量
格式: printenv 打印的环境变量名称
TINY4412 # printenv bootargs bootargs=root=/dev/nfs nfsroot=192.168.18.3:/work/rootfs ip=192.168.18.123:192.168.18.3:192.168.18.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
2.4 设置环境变量–setenv
查看帮助: TINY4412 # help setenv setenv - set environment variables -->作用是设置环境变量 Usage: //命令使用方法 setenv name value ... //使用格式 - set environment variable 'name' to 'value ...' //设置环境变量“名称”“数值……格式 setenv name - delete environment variable 'name' //删除环境变量
使用示例
设置上电的延时时间: TINY4412 # setenv bootdelay 10 //设置上电延时时间为10秒 TINY4412 # saveenv //保存设置 Saving Environment to SMDK bootable device... done 设置波特率示例: TINY4412 # setenv baudrate 115200 //设置波特率为115200 ## Switch baudrate to 115200 bps and press ENTER ... //设置完需要重启开发板,自动生效 删除环境变量示例: setenv baudrate //删除baudrate环境变量
引用环境变量示例:
TINY4412 # setenv timer 10 //随便设置一个环境变量 TINY4412 # setenv bootdelay ${timer} //引用环境变量 TINY4412 # save //保存环境变量 Saving Environment to SMDK bootable device... done TINY4412 # print baudrate=115200 bootargs=root=/dev/nfs nfsroot=192.168.18.3:/work/rootfs ip=192.168.18.123:192.168.18.3:192.168.18.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200 bootcmd=movi read kernel 0 40007fc0;bootm 40007fc0 bootdelay=10 //设置成功 ethaddr=00:40:5c:26:0a:5b gatewayip=192.168.18.1 ipaddr=192.168.18.123 netmask=255.255.255.0 serverip=192.168.18.124 timer=10 //设置的新环境变量 Environment size: 389/16380 bytes TINY4412 #
2.5 设置bootargs参数
bootargs是环境变量中的重中之重,甚至可以说整个环境变量都是围绕着bootargs来设置的。
coherent_pool参数:
设置DMA的大小 示例: coherent_pool=2M
本地挂载示例
set bootargs root=/dev/mmcblk0p2 rootfstype=ext3 init=/linuxrc console=ttySAC0,115200 set bootargs root=/dev/mmcblk0p2 rw rootfstype=ext3 init=/linuxrc console=ttySAC0,115200
NFS网络挂载示例:
set bootargs root=/dev/nfs nfsroot=192.168.18.3:/work/nfs_root ip=192.168.18.123:192.168.18.3:192.168.18.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
root参数用来指定根文件系统挂载的位置。
nfsroot参数是NFS网络文件系统挂载才需要设置,后面跟着服务器的NFS地址,挂载目录
ip参数是设置开发板的网卡IP地址,NFS网络挂载时必须设置。
init 是指定挂载文件系统之后运行的脚本,用来做一些系统初始化。
2.6 查看开发板的配置信息–bdinfo
TINY4412 # bdinfo arch_number = 0x00001200 ->开发板的机器码, 用来引导操作系统的内核 boot_params = 0x40000100 ->启动参数存储的内存位置 DRAM bank = 0x00000000 -> DRAM 编号,这里表示是第 0 个 DDR -> start = 0x40000000 -->DRAM 的起始地址 -> size = 0x10000000 -->DRAM 的大小 ( 0x10000000 /1024 /1024 = 256M) DRAM bank = 0x00000001 -> DRAM 编号,这里表示是第 1 个 DDR -> start = 0x50000000 -->DRAM 的起始地址 -> size = 0x10000000 -->DRAM 的大小( 0x10000000 /1024 /1024 = 256M) DRAM bank = 0x00000002-> DRAM 编号,这里表示是第 2 个 DDR -> start = 0x60000000 -->DRAM 的起始地址 -> size = 0x10000000 ->DRAM 的大小( 0x10000000 /1024 /1024 = 256M) DRAM bank = 0x00000003-> DRAM 编号,这里表示是第 3 个 DDR -> start = 0x70000000 ->DRAM 的起始地址 -> size = 0x0FF00000 ->DRAM 的大小( 0x10000000 /1024 /1024 = 256M) ethaddr = 00:40:5c:26:0a:5b ->网卡 MAC 地址(DM9600) ip_addr = 192.168.0.20 ->开发板的 IP baudrate = 0 bps ->波特率,这里是代码有问题,应该 115200 TLB addr = 0x3FFF0000 ->MMU(CPU) 映射表存储位置 relocaddr = 0xC3E00000 ->代码重新定位的地址 reloc off = 0x00000000 ->重定位地址 irq_sp = 0xC3CFBF58 ->irq堆栈指针 sp start = 0xC3CFBF50 ->开始地址堆栈指针 FB base = 0x00000000 ->framebuffer基地址
2.7 内存数据显示->md
查看帮助:
TINY4412 # ? md md - memory display 内存数据显示---只能显示内存中的数据,就是说只能在DDR地址中操作 Usage: md [.b, .w, .l] address [# of objects]
Md.b : 以字节方式显示数据
Md.w : 以字(2 个字节)
Md.l : 以双字(4 个字节)
以上表示以字节、字(2 个字节)、双字(4 个字节)为单位进行显示
**格式:**Md.b <要显示的地址> [显示的数据个数]
TINY4412 # md.b 1000000 10 //将起始地址1000000处的10个数据显示到终端 01000000: 06 00 00 ea fe ff ff ea fe ff ff ea fe ff ff ea ................
示例:
TINY4412 # md.b 1000000 10 一个字节显示: 01000000: 06 00 00 ea fe ff ff ea fe ff ff ea fe ff ff ea ................ TINY4412 # md.w 1000000 10 两个字节显示 01000000: 0006 ea00 fffe eaff fffe eaff fffe eaff ................ 01000010: fffe eaff fffe eaff 301a ea00 301b ea00 .........0...0.. TINY4412 # md.l 1000000 10 四个字节显示 01000000: ea000006 eafffffe eafffffe eafffffe ................ 01000010: eafffffe eafffffe ea00301a ea00301b .........0...0.. 01000020: e59f01a4 e3a01000 e5801000 e59f019c ................ 01000030: e5900000 e200003e e330003e 1a00000d ....>...>.0.....
2.8 复制内存命令 cp
查看帮助:
TINY4412 # help cp cp - memory copy 内存拷贝 --只能在内存中拷贝,就是说只能在DDR地址中操作 Usage: cp [.b, .w, .l] source target count 源地址 目标地址 数量个数
示例1:
TINY4412 # cp 100000 4000000 10 从起始地址100000开始拷贝10个数据到4000000的地址处
示例2:
TINY4412 # md.b 46000000 46000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ TINY4412 # md.b 10000000 10000000: 11 20 41 e4 08 00 05 08 05 00 00 00 10 00 00 00 . A............. TINY4412 # cp 10000000 46000000 10 从起始地址10000000开始拷贝10个数据到46000000的地址处 TINY4412 # md.b 46000000 46000000: 11 20 41 e4 08 00 05 08 05 00 00 00 10 00 00 00 . A.............
2.9 查看EMMC的信息->mmcinfo
查看帮助:
TINY4412 # help mmcinfo mmcinfo - mmcinfo
编号说明:
mmc 的编号是会变化的, Tiny4412 板上有 EMMC,有SD卡。这两个都归类为 MMC。 编号是0,1。 但是谁是0,谁是 1,是不确定的, 和启动方式有关。 在哪个存储器启动,哪个就是编号就是0。
查看SD卡信息:
TINY4412 # mmcinfo 0 Device: S3C_HSMMC2 设备名称 Manufacturer ID: 2 制造商标识 ID OEM: 544d 设备制造商 Name: SE08G 名称 Tran Speed: 0 Rd Block Len: 512 每一块的大小,字节为单位 SD version 2.0 SD卡的版本 High Capacity: Yes 是否是大容量卡 Size: 7460MB (block: 15278080) 容量大小,(总共有多少个块) Bus Width: 4-bit 总线宽度,SD卡接口是4条线 Boot Partition Size: 0 KB 引导分区大小
查看EMMC的信息:
TINY4412 # mmcinfo 1 Device: S5P_MSHC4 设备 Manufacturer ID: 15 制造商ID OEM: 100 原始设备制造商 Name: 4YMD3 名称 Tran Speed: 0 Tran速度 Rd Block Len: 512 每一块的大小,字节为单位 MMC version 4.0 MMC版本 High Capacity: Yes 是否是大容量卡 Size: 3728MB (block: 7634944) 卡的容量和总共的块大小 Bus Width: 8-bit 总线宽度 Boot Partition Size: 4096 KB 引导分区大小
2.10 mmc命令子系统
mmc不是单独的命令,他是一个子系统,支持多个命令。
查看mmc子系统的帮助信息
TINY4412 # help mmc mmc - MMC sub system MMC子系统 Usage: mmc read
参数说明:
mmc 命令中的参数都是 16 进制表示,不是 10 进制表示
(1)从MMC扇区读数据到DDR内存中->mmc read
格式:mmc read
(2)mmc write --写 ddr 中的数据到指定 mmc 扇区中
格式:mmc write
(3)擦除指定扇区
格式: mmc erase
(4)列出MMC设备–mmc list
TINY4412 # mmc list S3C_HSMMC2: 0 --- 0 编号的 mmc 设备,这里接 SD 卡 S5P_MSHC4: 1 --- 1 编号的 mmc 设备,这里接 开发板板载的EMMC
2.11 查看MMC分区信息–fatinfo
TINY4412 # help fatinfo fatinfo - fatinfo - print information about filesystem 打印文件系统信息 Usage: fatinfo
篇幅有限,下一篇继续介绍。
Linux 嵌入式
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。