Chinaunix首页 | 论坛 | 博客
  • 博客访问: 545385
  • 博文数量: 101
  • 博客积分: 1889
  • 博客等级: 上尉
  • 技术积分: 906
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-14 16:22
文章分类

全部博文(101)

文章存档

2012年(11)

2011年(19)

2010年(59)

2009年(12)

我的朋友

分类: 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       加载ramdiskN=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下的consolnull两个特殊设备文件是否存在,如果不存在则用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就可以生成mkimage2yaffsmkimageyaffs科执行文件,但是网上有说2.6.17版本以后的linux由于对YAFFS的操作和mkimageyaffs.c中的操作不一致,导致镜像烧录到NAND FLASH后无法启动文件系统。主要是因为对OOB区域的写入不一致造成的。我找来MIMI2440光盘中的mkimage2yaffs先用着。

生成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目录下没有consolenull两个特殊设备,或者是因为nand烧写yaffs驱动有问题,还有一种可能就是动态库没有拷全。

                   

【用#make zImage直接编译出来的镜像用UBOOTbootm是不能够引导的必须通过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-2.6.28.6 –A arm –O linux –T kernel –C none –a 0x30008000 –e 0x30008004 –d zImage uImage

bootargs=noinitrd root="/dev/mtdblock3" init="/linuxrc" console="ttySAC0",115200 mem=64M

阅读(2636) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~