系统移植(一) 环境搭建

来源:互联网 发布:浅喜似苍狗 知乎 编辑:程序博客网 时间:2024/04/29 08:59

一.开发板启动流程。

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 自启动。

0 0
原创粉丝点击