http://blog.chinaunix.net/uid-27016046-id-3244494.html
内核移植成功,其实我都不知道为什么成功,胡乱鼓捣鼓捣就出来了。
最重要的一点:移植完内核以后一定先要复位一下所以要先把bootcmd环境变量给删掉,再添加环境变量setenv bootargs 'noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200'
移植时的命令是
tftp 30000000 uImage
nand erase 60000 200000
nand write.i 30000000 60000 $(filesize)
复位一下,一定要复位,否则就会出现init进程的各种问题
如kernel panic-not syncing Attemped to kill init等等等等
移植文件系统:
tftp 30000000 utu2440.yaffs
nand erase 260000 3d9c000
nand write.yaffs1 30000000 260000 $(filesize)
再重启一下,然后添加环境变量setenv ‘nand read.i 0x32000000 0x60000 0x200000; bootm’再重启,ok!
一.先编译内核
在编译之前先把编译工具mkimage复制到/usr/bin下,有一点要注意,编译器的版本是什么对编译成功与否起着一些作用,而且内核和文件系统的编译器要使用相同的如我这儿用的是arm-linux-gcc3.4.1
2,配置内核选用已经写好的配置文件make menuconfig-->load an Alternate Configuration File-->config_480272_ts
如果要使用默认配置,如在arch/arm/configs中找到相似的配置文件make xxx_defconfig,再make menuconfig。这里我用的是厂家提供的配置文件。
3,make uImage产生内核uImage。uImage即是真正的内核加一个头部,这样uboot才会识别。这一步主要完成了两步:1是.config自动生成autoconf.h。2是自动生成auto.conf这个文件,这个文件会被顶层Makefile所包含,完成了转入c语言的一步。
二.编译最小文件系统
最小根文件系统包括:1、dev/console ,/dev/null设备节点,对应驱动程序
2,sbin/init(来源于busybox)
3.etc/inittab配置项(先要被init程序读取解析)
4.配置文件指定应用程序
5.应用程序所需要的库函数,即安装glibc,把所有的glbic下的*.so文件拷贝到lib目录下注意这个地方要用cp *.so* /test/busybox/_install/lib/ -d “-d”一定要加上,如果原文件是个链接文件就保持链接,否则会很大
根文件系统是linux启动时使用的第一个文件系统
mknod –m 660 console c 5 1
mknod –m 660 null c 1 3来创建/dev下的两个
etc下的文件一般可以下载或者拷过来直接用
先要下载busybox,所谓busybox就是一个应用程序,我们所使用的命令如ls,cp等都是执行这个应用程序,程序根据参数来区别不同命令。所有的命令都链接到busybox。进入busybox目录执行make menuconfig进行配置,配置安装到哪里是你创建的根文件系统等等make编译,安装时千万不能直接make install,而是先创建一个文件然后安装到那里,我这里用的是make CONFIG_PREFIX=/test/busybox/_install install。看安装成功与否要看sbin下的init进程是不是链接到busybox,否则安装失败。这样会生成sbin etc linuxrc等,
内核目的启动应用程序,启动的第一个进程是init进程,就是位于sbin下的init,init要先读取和解析配置文件,根据配置文件来启动执行用户的程序和时间,在etc下如果没有inittab要创建它。
bootargs ‘nointitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200’
代表root是放到第三个分区上的。
三.做映像文件
把mkyaffsimage拷贝到 /usr/bin下,要加可执行属性。chmod +x mkyaffsimage
然后进入到busybox目录下,mkyaffsimage _install utu2440.yaffs文件系统制成啦~~
四,配置NFS服务器
1.先在ubuntu10.04下安装ubuntu nfs服务器apt-get install nfs-kernel-server
2.配置/etc/exports定义允许ubuntu允许挂载的目录和权限
如我这里是在root下建立了一个rootfs在export下添加如下一行:/rootfs *(rw,sync,no_root_squash)
其中/rootfs是要共享的目录,*允许所有网络段访问,rw是可读写权限,sync是资料可以同步写入内存和硬盘,no_root_squash是ubuntu nfs客户端分享目录使用者的权限,如果客户端用的是root用户,那么对于该共享目录而言,该客户端就具有root权限。
3,重启nfs服务
/etc/init.d/portmap restart
/etc/init.d/nfs_kernel_server restart
4,测试nfs
显示共享目录showmount –e
用以下命令把它挂载到本地磁盘上例如将rootfs挂载到/mnt下:
mount –t nfs localhost:/rootfs /mnt 用df命令查看是否挂载成功
umount /mnt卸载
5开发板上如果设置ubootbootargs会使其从nfs启动
但是我这里没有,所以只是设置了挂载。在开发板上输入命令:mount –t nfs 192.168.1.23:/rootfs /mnt 其中ip是linux主机ip挂载成功后,在linux主机下可以写一个hello.c的程序,注意!!!这个地方要用交叉编译链来编译,否则在开发板上无法直接运行,不识别!
nfs: server 192.168.1.23 not responding, still trying
解决方法:1)协议不同,修改为tcp协议
2)网卡传输速率不同,修改速率相同,而且是大速率。命令在笔记本上。