您的位置:首页 > 运维架构 > Linux

linux常见问题之系统移植的概念区分

2013-09-09 09:32 309 查看
1. 首先要清楚要让板子跑起来必须有三个文件:

<1> u-boot ,系统引导,没有它系统起不来

<2> kernel , 内核

<3> rootfs ,根文件系统

所谓移植就是把这三部分根据实际需求移植到板子上,让板子跑起来

2. 要明白并不是每次把u-boot 和kernel 等修改编译完了都要写到nandflash里面,完全可以现在内存里跑一下,在最后没问题的时候写到nan
dflash里,就是平时说 的产品定型了写到板子上,直接在板子上启动(突然想起去年的时候问我的同学怎么把程序写到板子里去,当时他还搞的很神秘,知道毕业都没告诉我,呵呵,其实就是写到nandflash里啦).

3. 先说在内存跑的:

a. 烧写u-boot,先让引导系统跑起来

运行串口通信程序(putty)

Session
->Serial(选择usb通信)->Flow
control->None

关闭开发板电源,将拨码开关SW1调至0001(usb启动模式)后打开电源


(因为此刻板子里没系统引导程序u-boot ,所以要选择usb启动)

启动dnw程序

Configuration -> Options -> Download Address(0x2ff80000);并设置串口与波特率

加载运行USB Installer_DDR2.bin

USBPort à Transmit à Transmit,选中image目录下的USB
Installer_DDR2.bin

加载运行u-boot.bin

USBPort àTransmit àTransmit,选中image目录下的u-boot.bin

设置并保存环境变量
# printenv // 查看环境变量的值并按如下设置
# setenv baudrate 115200
# setenv ethaddr 11:22:33:44:55:66
# setenv gatewayip 192.168.1.1
# setenv
serverip 192.168.1.100 // serverip要和虚拟机的ip相同
# setenv ipaddr 192.168.1.200 // ipaddr也可以是192.168.1.x其他值
#
setenv netmask 255.255.255.0

保存环境变量

#
saveenv

拷贝image/u-boot.bin到虚拟机/tftpboot目录下

测试网络是否连通
// 只能通过u-boot去ping虚拟机

#ping <serverip>

之后通过网络从服务器下载u-boot.bin到内存:

#tftp
20008000 u-boot.bin

#
nand erase 0 40000
# nand write 20008000 0 40000
关闭开发板电源,将拨码开关SW1调至0000(nand启动模式)后打开电源

b.
通过网络加载内核和文件系统

#
setenv bootcmd tftp 20008000 zImage\; go 20008000
# setenv bootargs root=nfs nfsroot=192.168.1.33:/source/rootfs console=ttySAC0,115200init=/linuxrc ip=192.168.1.200
# saveenv

设置虚拟机
拷贝/image/zImage到虚拟机/tftpboot目录下
解压rootfs.tgz到虚拟机/source目录下
修改虚拟机nfs配置文件/etc/exports,添加如下内容并重启nfs服务
/source/rootfs *(rw,sync,no_subtree_check,no_root_squash)
$sudo /etc/init.d/nfs-kernel-server restart

(注意 #
setenv bootcmd tftp 20008000 zImage\; go 20008000
就是这句决定了内核在内存里跑的而不用写到nand里面 )

c. 重新启动开发板,u-boot自动加载、执行内核

4. 再说说 从nand
flash加载内核和文件系统(也就是被我同学搞得很神秘的那部分了,呵呵)

拷贝rootfs.cramfs到虚拟机/tftpboot目录下
烧写内核镜像到nand
flash
# tftp 20008000 zImage
# nand erase 100000 300000
# nand write 20008000 100000 300000
烧写文件系统镜像到nand
flash
# tftp 20008000 rootfs.cramfs
# nand erase 400000 400000
# nand write 20008000 400000 400000
设置启动参数

# setenv bootdelay 3
#setenv bootcmd nand read 20008000 100000 300000\;go 20008000
#setenv bootargs root=/dev/mtdblock2 init=/linuxrc
console=ttySAC0,115200
# saveenv
重新启动开发板,u-boot自动加载、执行内核

(其实前面的都是先从服务器下载,再擦写nand的一段地址再写入到nand中,关键是

#setenv bootcmd nand read 20008000 100000 300000\;go 20008000
这句决定了启动方式是从nand开始的 )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: