一.开发板启动流程。
Bootloader(初始发硬件/加载内核)kernel(初始化/挂载rootfs)application。
rootfs其实就是,针对特定的操作系统的架构,一种实现的形式;
具体表现为,特定的文件夹,文件夹之间的关系,即组织架构,以及特定的各种文件;
Linux中的rootfs,就是那些文件夹和文件,
包括什么根文件目录’/’
系统相关的配置文件目录/etc
存放系统启动相关配置的/etc/init
存放系统相关的工具 /sbin
存在用户的工具/usr/bin
二.环境的搭建
Pc和开发板用tftp交互。
(一)配置主机端tftp服务。
1.检查是否安装tftp server
#dpkg -s tftp-hpa
2.安装tftp server
#apt-get install tftpd-hpa tftp-hpa
3.修改文件 vim /etc/default/tftpd-hpa, 开启tftp服务。
1 # sudo vi /etc/default/tftpd-hpa
2
3 TFTP_USERNAME="tftp"
4 TFTP_DIRECTORY="/home/tftpboot"
5 TFTP_ADDRESS="0.0.0.0:69"
6 TFTP_OPTIONS="-l -c -s"
注:除了第4行其他的都不用改。
按上面创建tftpboot目录。
设置权限:#chmod 777 /home/tftpboot
重新刷新配置文件: /etc/init.d/tftpd-hpa restart
重启: #service tftpd-hpa restart
测试:#tftp 127.0.0.1
Tftp>get <download file>
Tftp>put <upload file>
4.主机端NFS服务器配置
A)安装:#apt-get install nfs-kernel-server nfs-common
B)修改 /etc/exports文件
/home/rootfs *(rw,sync,no_subtree_check)
注:配置的格式:[共享的目录] [客户端主机名称或IP]([参数1,参数2,...])
Rw:可读写的权限。
Sync:资料同步写入内存与硬盘中。
no_subtree_check:...
C)启动nfs服务
/etc/init.d/nfs-kernel-server restart
D)测试:
挂载:mount -t nfs 127.0.0.1:/home/rootfs /mnt
解挂:umount /mnt
三.Bootbloader的启动
系统家电或复位后,所有CPU都会从某个地址开始执行。
使用,相当于超级终端。
1.读取环境变量。
$ printenv
$ pri :为 printenv的缩写
如:
FSC100 # pri
bootdelay=3
baudrate=115200
ethaddr=11:22:33:44:55:66
ethact=dm9000
filesize=1D7E84
fileaddr=20008000
gatewayip=10.0.0.1
netmask=255.0.0.0
ipaddr=10.0.0.11
serverip=10.0.0.55
bootcmd=nand read 20008000 100000 300000 ; go 20008000
bootargs=noinitrd init=/linuxrc console=ttySAC0,115200 root=/dev/nfs nfsroot=10.0.0.55:/home/rootfs ip=10.0.0.11
stdin=serial
stdout=serial
stderr=serial
注:
自启动延迟时间(单位是秒):bootdelay=3
串口的波特率:baudrate=115200
MAC地址:ethaddr=11:22:33:44:55:66
板子的IP地址:ipaddr=10.0.0.11
网关IP:gatewayip=10.0.0.1
子网掩码:netmask=255.0.0.0
tftpboot上传程序的内存地址:loadaddr=20008000
指定网卡驱动:ethact=dm9000
tftp server的IP(指定tftpboot从那主机环境下载):serverip=10.0.0.111
//传递给内核的启动参数
//noinitrd不使用initrd(不用ramfs)
//init——指定初始化程序
//console——指定控制台(ttySACx -嵌入式linux下, PC - ttySx)
//root - 指定根文件系统
- nfs表示根文件系统是网络文件系统
- nfsroot=(nfs server IP):/nfs共享目录
//ip - 指定板子IP
bootargs noinitrd init=/linuxrc console=ttySAC0,115200 root=/dev/nfs nfsroot=10.0.0.55:/home/rootfs ip=10.0.0.11
//串口终端
stdin=serial
stdout=serial
stderr=serial
注:修改/添加、删除环境变量
修改/添加:$ setenv 变量名 内容
删除:$ setenv 变量名
保存环境变量:$ saveenv
2.通过网络加载内核并执行。
$ nand read 内存地址 nand偏移量 长度
$ tftp 内存地址 文件名
$ nand erase nand偏移量 长度
$ nand write 内存地址 nand偏移量 长度
范例
上传
$ tftp 20008000 zImage
注:
0x000000000000-0x000000100000 : "bootloader"
0x000000100000-0x000000400000 : "kernel"
0x000000400000-0x000000800000 : "rootfs"
0x000000800000-0x000010000000 : "usrfs"
擦除nand kernel分区
$ nand erase 100000 300000
烧写kernel到 kernel分区
$ nand write 20008000 100000 300000
改变自起动变量
$ set bootcmd nand read 20008000 100000 300000 \; go 20008000
$ save
$boot 自启动。

1083

被折叠的 条评论
为什么被折叠?



