嵌入式Linux系统移植——uboot常用命令
flash的一般分区:
其它数据 |
环境变量 |
可执行程序。如bootloader |
print(可缩写为:pri):打印查看uboot这个软件中集成的环境变量
setenv、saveenv:设置、保存环境变量
如:
设置环境变量: setenv abc 100
删除环境变量: setenv abc
保存环境变量到存储器:saveenv abc 100
网络层的设置: setenv ipaddr 10.21.12.10
nand:
nand [动词] [内存地址] [nandflash的内部地址] [搬移大小]
- nand中5M空间的数据读取到内存地址2100 0000
5M = 5* 1M ,1M = 2^20 = 0x100000
读数据:nand read 21000000 500000 1024
- nand把内存地址2100 0000的值写到5M空间
初始化:nand erase 500000 1024
写数据:nand write 21000000 500000 1024
tftp:
设置、保存本机IP:
setenv ipaddr 192.168.9.120
saveenv ipaddr 192.168.9.120
设置服务器ip:
setenv serverip 192.168.9.3
利用tftp传递文件a.txt 到内存(s5pv210的dram中)地址 20008000上面:tftp 20008000 a.txt
inux下安装tftp服务端:
32bit sudo apt-get install tftpd-hpa
64bit sudo apt-get install tftpf openbsc-xinetd
bootm:
bootm传递r0,r1,r2还有bootargs
bootm 21000000
bootm 加载linux镜像是加载uImage,uImage是由mkimage制作而来,和zImage的差异是uImage是zImage压缩过的,bootm需要先对uImage解压,解压地址为内核入口地址。当解压完成时uImage和zImage 几乎是相同的,具体差异可以论述。uboot目前只能支持uImage启动,不支持zImage启动
zImage转换为uImage
mkimage -A arm -O linux -T kernel -C none -a 20008000 -e 20008000 -n "linux-2.6.36" -d zImage uImage
go:
go命令本质就是改变当前pc值
内核启动条件:内核、启动参数、文件系统
启动参数:(bootargs)
root= 启动的根文件系统在哪个设备
init= 内核启动后第一个可执行文件init进程从哪里来(指定内核启动后,运行的第一个脚本)
console= 内核启动时,使哪个设备作为控制台
initrd (boot loader initialized RAM disk),就是由uboot 初始化的内存盘。
在 linux内核启动前,uboot会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统
文件系统:内核与用户交互的一个中介
文件系统的烧写:NFS、Ramdisk
Ramdisk:内存磁盘
配置的内容:
root=/dev/ram
initrd= 0x22000000,8M (设备信息(文件系统的基地址,大小))
init=/linuxrc
console=ttySAC0
NFS:网络文件系统(TCP/IP协议 C/S架构)优势:实际调试无需繁杂的复制运行程序
PC机服务端安装:
1、搜索 apt-cache search nfs-
2、安装 sudo apt-get install nfs-kernel-server
PC中nfs配置文件:/etc/exports
(/home/rocky/work/rootfs) *(rw,sysnc,no_substree_check))
//第一列为开放权限的目录 第二列中的*为IP地址,指出要轮询哪些主机访问,*代表任意主机 第二列括号内容为访问服务开启的权限 (可读可写,同步,安全机制)
3、重启服务:sudo /etc/init.d/nfs-kernel-server restart
开发板客户端:
设置bootargs(客户端根文件位置,NFS服务端共享目录的IP和绝对路径,客户端系统的IP,init console)
内核启动步骤(Ramdisk文件系统):
第一步:安装并启动uboot
第二步:通过tftp服务将内核文件及文件系统分别下载到指定位置
tftp 20008000 uImage
tftp 21000000 initrd.img.gz
第三步:设置启动参数
setenv bootargs root=/dev/ram initrd=0x21000000,8M init=/linuxrc console=ttySAC0,115200
第四步:bootm 20008000
至此内核启动完成。
内核启动步骤(NFS文件系统)
优势:由于将PC服务端的一个目录链接作为开发板内核的文件系统,所以,可以在PC服务机上编辑调试代码,调试生成的结果会自动更新至开发板客户端系统中
PC服务端动作:
第一步:PC服务端安装、配置NFS服务器
第二步:解压服务端已存在的镜像文件initrd.img.gz
第三步:挂载镜像文件到当前镜像所在位置的swap目录下 sudo mount -t ext2 initrd.img ./swap/
第四步:进入开放权限的目录将swap目录下的所有内容复制进来。
sudo cp -a /home/rocky/tftpboot/swap/* ./
目标开发板的动作
第一步:安装uboot
第二步:在uboot下设置传递给内核的启动参数bootargs
setenv bootargs root=/dev/nfs nfsroot=192.168.10.110:/home/rocky/work/rootfs ip=192.168.10.122 init=/linuxrc console=ttySAC0,115200
第三步:将内核文件加载至指定位置tftp 20008000 uImage
第四步:启动bootm 20008000
自动运行:
uboot环境变量中设置bootdelay、bootcmd
上电延时:bootdelay=10
Raddisk文件系统启动内核时
设置运行时的动作命令:bootcmd= nand read 20008000 100000 200000;nand read 21000000 56000000 400000;bootm 20008000
而NFS文件系统则无法做bootcmd这个指令
嵌入式Linux系统移植——uboot常用命令的更多相关文章
- 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)
深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...
- linux系统入门一些常用命令解析
接触IT行业的时候,就使用了ubuntu系统做开发,那个时候是一头雾水,从习惯了window下的界面操作,到终端下的命令行操作,着实一开始让人很不习惯.但是没办法,那个时候公司每个人都用Ubuntu系 ...
- Linux 系统运维常用命令
1 文件管理2 软件管理3 系统管理4 服务管理5 网络管理6 磁盘管理7 用户管理8 脚本相关9 服务配置==================================------------ ...
- 【Linux】---Linux系统下各种常用命令总结
在Linux系统下,“万物皆文件”,之所以强调在强调这个概念,是因为很多人已经习惯了win系统下找找点点得那种方式和思维,因此总是会觉得linux系统下很多指令既复杂又难记.其实都是一样得东西,只是w ...
- linux 系统移植uboot
这里使用的版本为:u-boot-2014.04 查看并修改位置如下:u-boot-2014.04/include/configs/at91sam9x5ek.h(1)查看一下Linux内核在NandFl ...
- Linux系统中的常用命令
查看日志 cat 或 tail -f 日志文件说明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与安全 ...
- 嵌入式Linux系统移植(二)——交叉编译工具集
常用工具:readelf.size.nm.strip.strings.objdump.objcopy.addr2line readelf:读可执行文件的elf头 ELF Header: Magic: ...
- 嵌入式linux系统移植(一)
内容: 交叉编译环境 bootloader功能子系统 内核核心子系统 文件系统子系统要点: 搭建交叉编译环境 bootloader的选择和移植 kernel的配置.编译.移植和调 ...
- linux系统的一些常用命令
cd 进入某个目录 ifconfig 查看本机的ip cp (要复制的文件的位置) (要把文件复制的位置) ll 查看文件下,文件的操作权限 ls查看该文件夹下的有那些文件和文件夹 vi filena ...
随机推荐
- ZT Android Debuggerd的分析及使用方法
Android Debuggerd的分析及使用方法 分类: 移动开发 android framework 2012-12-28 12:00 983人阅读 评论(0) 收藏 举报 目录(?)[+] An ...
- java内部类之成员内部类之局部内部类
局部内部类特点: 1.定义在代码块.方法体内的类叫局部内部类 2.局部内部类访问外部类的属性和方法使用“外部类名.this.属性名”和“外部类名.this.方法名(参数)”的形式 3.对外部世界完全隐 ...
- Echarts 嵌套饼图实现,内环点击控制外环显示
Echarts有交互事件,但是如果用其进行图形变更,恐怕就只有重新修改配置了. 如图,我想要实现,内圈的数据控制外圈的图形,当点击内环的某一块时,就可以实现,更改外环的目的. 起初我想能不能直接修改o ...
- 语法规范:BNF与ABNF 巴斯克范式
语法规范:BNF与ABNF 巴斯克范式 BNF 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语 ...
- 「NOIP2018 保卫王国」
题目 强制选点我们可以把那个点权搞成\(-inf\),强制不选我们搞成\(inf\),之后就真的成为动态\(dp\)的板子题了 由于不想像板子那样再写一个最大独立集的方程,之后利用最小点覆盖=总点权- ...
- urllib下使用Xpath表达式示例
urllib下使用Xpath表达式示例 使用xpath表达式需要先将需要匹配的数据转换成tree格式,这就需要先装lxml模块.安装方法可以使用pip安装. 示例代码: import urllib.r ...
- classlist和array.prototype.slice.call
1.classlist document.getElementById("myDIV").classList.add("mystyle"); classList ...
- PHP异步:在PHP中使用 fsockopen curl 实现类似异步处理的功能
PHP从主流来看,是一门面向过程的语言,它的最大缺点就是无法实现多线程管理,其程序的执行都是从头到尾,按照逻辑一路执行下来,不可能出现分支,这一点是限制php在主流程序语言中往更高级的语言发展的原因之 ...
- python中动态导入模块
当导入的模块不存在时,就会报ImportError错误,为了避免这种错误可以备选其他的模块或者希望优先使用某个模块或包,可以使用try...except...导入模块或包的方式. 例如: Python ...
- PAT——1028. 人口普查
某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月 ...