烧写内核
扫描二维码
随时随地手机看文章
1 配置编译linux内核
通过make menuconfig编译内核
make zImage
2 制作uImage
在.../linux-2.6.32.2/arch/arm/boot下面可以找到生成的zImage
把.../u-boot-2010.03-tekkaman-master/tools下的mkimage拷贝到/usr/sbin目录下
#cd /root
#ls -a
#vi .bashrc
加上路径 PATH=$PATH:/usr/sbin
#cd .../linux-2.6.32.2/arch/arm/boot
#mkimage -n 'mini2440' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage uImage
此处,注意-a和-e后的地址相差0x40,即64个字节,为了后面,用bootm 30008000来启动内核
从而生成uImage
uImage和zImage的区别是,uImage在zImage的前面加上了64字节的启动数据,供bootm来用,如果是zImage的话,只能通过go命令来启动。
最后,加上可执行权限,将uImage放置到tftpboot目录下。
chmod +x uImage
cp uImage /root/tftpboot
3 安装tftp
3.1 下载tftp服务器、客户端tftp和守护进程xinetd三个包
yum install xinetd tftp tftp-server
3.2 建立tftp工作目录并修改属性(不修改属性会出现error)
cd /
mkdir tftpboot
chmod 777 -R tftpboot/
3.2 配置vi /etc/xinetd.d/tftp
server_args= -s /tftpboot -c
/tftpboot是创建tftpboot的目录,可以修改,我的是/root/src/mini2440/tftpboot
-s,必须加,否则会出现决定路径之类的错误
-c, 是允许客户端更改工作目录下的文件
diable=no
3.4 启动服务
在开启服务之前,务必关闭防火墙service iptables stop
另外需修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。否则,出现Transfer timed out错误。
service xinetd start
可能service服务不识别,只需把该命令所在的路径加入路径环境变量即可PATH=$PATH:/sbin
3.5 查看服务
可以通过相关命令查看tftp服务是否启动
netstat -a|grep tftp
udp 0 0 *:tftp *:*
说明启动了
3.6 验证tftp服务可以使用
tftp 127.0.0.1
tftp> get uImage //uImage是tftpboot目录下的存在的文件
tftp> q //退出
如果在执行此命令的目录下有了uImage文件,则说明tftp安装成功。
4 安装NFS
4.1 查看是否安装了NFS
rpm -qa|grep nfs
nfs-utils-lib-1.1.5-3.fc14.i686
nfs-utils-1.2.3-6.fc14.i686
如果有这两个包,则说明已安装,否则,用yum进行安装即可。
4.2 配置NFS
vi /etc/exports
/root/src/mini2440/rootfs 192.168.2.*(rw,sync,no_root_squash)
exports在第一次设置时是空的,在第一行输入上述信息
/root/src/mini2440/rootfs //允许挂载的目录
192.168.2.* //允许192.168.2.网段的访问
(rw,sync) //访问的模式,可读可写,同步访问
4.3 开启服务
前提还是先关闭防火墙
service nfs start
查看NFS是否开启
service nfs status
关闭服务
service nfs stop
4.4 设置系统自动开启NFS
通过setup,进入system services,找到nfs,然后,按下空格选上,保存即可。
5 设置启动参数
进入u-boot的下载命令界面
print
查看环境变量值
setenv ipaddr=192.168.2.250
setenv serverip=192.168.2.103
setenv gatewayip=192.168.2.1
setenv bootargs noinitrd root=/dev/nfs rw nfsroot=192.168.2.103:/root/src/mini2440/rootfs ip=192.168.2.250:192.168.2.103::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M
6 下载内核
6.1 首先验证网络
在u-boot里 ping 192.168.2.103
host 192.168.2.103 is alive
证明网络可行
6.2 利用tftp命令下载内核uImage,此uImage是处理好之后放在tftpboot目录下的
tftp 30008000 uImage
此时,uImage下载到了内存的30008000处
启动内核
bootm 30008000
如果根文件系统制作好了,并且放在了nfsroot知道的地方,即主机中开放出来的NFS挂载点
则启动成功。