分类: LINUX
2010-05-25 16:27:49
终于到了最后的步骤,让我们来启动Linux吧
9、 关于内核启动参数。
Linxu内核参数是以空格分开的一个字符串列表,格式如下:
name[=value1][,value2]…[,value10],“name”为关键字,内核用它来识别把其后的值传到哪里,可用关键字为:root=,nfsroot=,nfsaddrs=,ro,rw,debug,init值的个数限制为10,但可以通过多次使用同一个关键字来使用超过10个参数。首先内核检查关键字,在bootsetups数组中搜索用于该关键字相关联的已注册处理函数,若找到相关的已注册处理函数,就将其后的值作为参数传递给处理函数,若没有相应的处理函数,则被当作系统环境变量处理。常用设备无关启动参数如下:
inti= 设置内核执行的初始化进程名,为空时按顺序搜索:/etc/init,/bin/init,/sbin/init,/bin/sh
nfsaddrs= 设置NFS启动时NFS地址
nfsroot= 设置网络启动时的NFS根名字,若不是以”/”,”,”或”.”开始则默认指向/tftp-boot
root= 设置内核启动时使用的根文件系统设备
ro 以只读方式加载根文件系统
rw 以读写方式加载根文件系统(默认选项)
mem= 限制内核使用的内存数量。若指定的数量操作实际安装的内存数量,内核会崩溃。
load_ramdisk=N
N=1 加载ramdisk;N=0 不加载ramdisk(默认值)
ramdisk_size=设定ramdisk的最大值,单位KB,默认为4096KB
ramdisk_start=设置ramdisk的开始块号
noinitrd 直接将initrd数据写到/dev/initrd,而不是转换为ramdisk
10、 通过NFS启动开发板Linux,并挂载文件系统。首先配置好主机端的NFS共享目录并打开NFS服务。然后设置启动参数为:
noinitrd console="ttySAC0",115200 init="/linuxrc" root="/dev/nfs" nfsroot="192".168.1.85:/opt/nfs ip="192".168.1.70:192.168.1.85:192.168.1.1:255.255.255.0:hgateway.net:eth0:off
console是用到的控制台,init是启动后执行的第一个程序,nfsroot的值为:主机IP:/共享目录,
ip的值为:开发板IP:主机IP:网关IP:子网掩码:开发板名字(可任取):开发板用到的网卡:off
将构建好的根文件系统打包拷贝到主机/opt/nfs目录下,特别注意根文件系统中/dev下的consol,null两个特殊设备文件是否存在,如果不存在则用mknod命令创建。
#service nfs start启动主机上NFS服务;
启动开发板$set bootargs noinitrd console="ttySAC0",115200 init="/linuxrc" root="/dev/nfs" nfsroot="192".168.1.85:/opt/nfs ip="192".168.1.70:192.168.1.85:192.168.1.1:255.255.255.0:hgateway.net:eth0:off;tftp 30008000 uImage;bootm
NFS下根文件系统顺利挂载。
11、 制作YAFFS镜像要用到yaffs源码包中utils目录下的mkimage2yaffs.c,直接在这个目录下执行make就可以生成mkimage2yaffs和mkimageyaffs科执行文件,但是网上有说
生成yaffs镜像:#./mkimage2yaffs /opt/nfs root.yaffs
烧写yaffs镜像到文件分区:#tftp 30008000 root.yaffs
可以看到下载文件的大小是xxxx(xxxx HEX)
#nand erase 430000 xxxx(最好擦除比下载的文件大一点的空间)
#nand write.yaffs 30008000 430000 xxxx(注意这里要用wtire.yaffs不然的话默认是写入jaffs镜像,这样的话就会对OOB区域进行操作,但是yaffs文件的oob区域已经包含了ECC如果重写的话就会造成错误,会无缘无故出现很多的坏块,就只能用nand scrub进行清除修复了。)
下载内核镜像并启动:#tftp 30008000 uImage;bootm
一片E文飘过后,可以进入Linux提示符了,高兴哈哈
PS:若启动出现错误:启动出现
VFS: Mounted root (yaffs filesystem).
Freeing init memory: 176K
Warning: unable to open an initial console.
Failed to execute /linuxrc. Attempting defaults...
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
那有可能是因为文件系统的/dev目录下没有console和null两个特殊设备,或者是因为nand烧写yaffs驱动有问题,还有一种可能就是动态库没有拷全。
【用#make zImage直接编译出来的镜像用UBOOT的bootm是不能够引导的,必须通过UBOOT的/toos/mkimage这个工具为内核加上uboot引导头才可以,只要已任何目标编译一次uboot就可以在tools目录下生成mkimage可执行文件,为了使用方便可以将其拷贝到/usr/bin目录下。参数说明:
-A 设定体系结构,我这里是arm;-O 设定操作系统,我这里是Linux;-T 设定镜像类型,我这里是kernel即内核;-C 指定压缩,不压缩为none;-a 载入地址,可以设为0x30008000好像不能设的太高;-e 进入地址,mkimage会在生成的镜像头部加入40字节的UBOOT引导信息,所以这个地址为-a指定的地址+40,可设为0x30008040;-n 镜像的显示名称;-d指定原文件的名称和路径 指定生成的镜像名称及路径
#mkimage –n linux-
bootargs=noinitrd root="/dev/mtdblock3" init="/linuxrc" console="ttySAC0",115200 mem=