03_系统移植入门
03_系统移植入门
- 移植的基本步骤
- 确定目标机、主机的连接方式 (已完成)
- 安装交叉编译器(已完成)
- 搭建主机-目标及数据传输通道(已完成)
- 编译三大子系统
- 烧写测试
uboot常用命令
https://blog.csdn.net/conjimmy/article/details/128693548
print 打印uboot中已经集成好的环境变量信息
setenv、seveenv
设置环境变量
例如
set abc 100 200
第一个是变量名,后面都是变量值
后面如果什么都不跟,就是删除环境变量
这些变量都是存在 内存里的一小块空间
要把环境变量保存(把环境变量从内存拷贝到flash中),就需要使用saveenv
指令
网络环境相关的信息
ipaddr
set ipaddr 192.168.1.160
nand
nand [动词] [内存地址] [flash内部地址] [搬移大小]
erase
write
read
把nand flash中5M空间读到内存21000000,1k大小
nand read 21000000 500000 1024
tftp
C:开发板
S:虚拟机
PC上提前开启tftp服务器
分为windows和linux
windows下一个tftp软件即可
linux上指令安装
sudo apt-get install tftpd openbsc-xinetd
具体设置网络上搜索
然后开发板上uboot下
输入tftp [内存地址] 文件
例如:tftp 20008000 a.txt
会把服务器上的a.txt的文件里的数据,拷贝到0x20008000
的内存处
bootm
启动uImage
go
uImage
zImage Image bzImage
这些都是我们常见的内核文件
我们把内核文件下载到内存中
tftp 20008000 uImage
然后使用go
指令跳转到这个内存地址
go 20008000
开始执行linux内核
结果是启动不了的
因为内核需要有启动条件
内核启动条件
其实就是环境变量 bootargs
root
启动的跟文件系统在那个设备中
设备信息 RAM NFS Flash
init
内核启动后,第一个可执行文件,也就是init进程从哪里来
console
内核启动时,使用那个设备作为控制台
例如:
1、设置环境变量
setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200
2、保存环境变量
saveenv
启动完了之后,我们的文件系统还没有挂载,导致我们的根文件系统没有,所以用户没法交互
文件系统的烧写
这个文件系统可以是各种介质,例如
内存RAM ramdisk
Nand flash
网络等等,都是可以的
- 修改启动参数
root=/dev/ram
initrd=0x21000000,8M
内核从ramdisk启动文件系统,起始地址0x21000000
,大小8M
init=/linuxrc
console=ttySAC0
- 提前将内核和根文件系统拷贝到ramdisk上
20008000
uImage
tftp 20008000 uImage
21000000
根文件系统文件 initrd.img.gz
tftp 21000000 initrd.img.gz
- 设置启动参数
setenv bootargs root=/dev/ram initrd=0x21000000,8M init=/linuxrc console=ttySAC0,115200
- 启动内核
bootm 20008000
挂载网络文件系统 NFS
方便驱动开发
在驱动开发的时候,我们需要频繁的修改一些驱动文件,如果在虚拟机上修改,然后再拷贝到开发板上,会十分麻烦,所以我们选择把虚拟机上的一部分空间挂载为开发板的文件系统
- PC上安装nfs服务
sudop apt-cache search nfs-
搜索nfs服务
sudo apt-get install nfs-kernel-server
安装nfs服务
配置:vim /etc/exports
里面添加
共享目录/home/rocky/work/rootfs
启动服务
sudo /etc/init.d/nfs-kernel-server restart
把前面的根文件系统文件解压一下gunzip initrd.img.gz
得到initrd.img
然后挂载到当前目录下的swap文件夹下
sudo mount -t ext2 initrd.img ./swap/
然后进入到这个目录下,就会发现有linux的根文件目录,把这些全部拷贝到我们之前设置的共享目录
sudo cp -a /home/rockey/tftpboot/swap /home/rocky/work/rootfs
至此,服务端的所有工作已经做完
- 开发板上设置启动参数,挂在我们的虚拟机文件系统
setenv bootargs root=/dev/nfs nfsroot=192.168.10.110:/home/rocky/work/rootfs ip=192.168.10.122 init=/linuxrc console=ttySAC0,115200
启动bootm 0x20008000
自动运行
设置uboot自动启动内核
bootdelay
bootcmd