How tough life is, how strong you should be!
分类: LINUX
2012-07-05 20:40:02
今天终结一下上一周痛苦的ramdisk制作过程、以及用最小文件系统测试简单的驱动。
前提是已经稍微研究过uboot,并且已经将uboot烧到flash实现开机可以进入uboot命令界面。
先在kernel的driver下加上你要的驱动文件,然后配置makefile和kconfig文件,编译内核,会生成ko文件,此处的资料很多,找找就知道了。
一、制作文件系统
方法一:
1、dd if=/dev/zero of=/dev/ram0 bs=1k count=4096
说明:if:从文件读取;of:输出到文件;bs:将ibs(输入)和obs(输出)设置成指定的字节数;
count:仅读取指定的区块数,4096=4M;
2、mke2fs -vm0 /dev/ram0 4096
说明:将RamDisk格式化成ext2文件系统格式,大小为4M
3、mount /dev/ram0 /home/bobo/haibo
说明:mount RamDisk,将根文件系统拷贝到/home/bobo/haibo目录下
做到这一步应该可以看到lost+find文件夹
4、向haibo文件夹加入必要的文件夹,这个就不多说了,我试了两种不同的方法,一种是直接下了一个最小文件系统的压缩叫etc.gz的文件,直接解压到haibo文件夹就好,另外一种就是将一个现成的ramdisk文件夹下的所有文件拷贝到haibo里。实验室有同学是自己做的busybox,自己生成文件,其实都一样,就是比较烦,还要自己编写很多文件,都是网上抄,只要能看懂做了哪些事,收获应该都一样。
这一步完成就做好文件系统了。
5、umount /home/bobo/haibo
6、gzip -c9 /dev/ram0 > ramdisk.gz或dd if=/dev/ram0 bs=1k count=2048 | gzip -v9 > /tmp/ram_image.gz 将ramdisk文件系统压缩
方法二:
1、dd if=/dev/zero of=ramdisk bs=1k count=8192
2、mke2fs -F -m0 ramdisk
3、mount -o loop ramdisk ./ramdir
4、dd if=ramdisk bs=1k count=8192 | gzip -v9 > ./ramdisk.gz
5、mkimage -A ppc -O linux -T ramdisk -C gzip -a 0x41000000 -e 0x41000000 -n "ramdisk image" -d ramdisk.gz linux.rd
最后一步两个地址要好好弄一下。
二、 在uboot下烧系统镜像和文件系统镜像。
可以用dnw,通过usb烧录,也可以用tftp来下,如在uboot下通过 tftp 0x40008000 uImge(前提是主机开了tftp服务,并且在tftproot文件下有uImage。这个可以查一下如何用tftp的文档。)
同样的方法将ramdisk文件系统烧到指定的地址下tftp 0x41000000 ramdisk.gz
三、修改uboot启动参数
set bootargs root=/dev/ram0 rw console=ttyS0,115200 initrd=0x41000000,0x800000 mem=216mb init=/init 其中init指ramdisk文件系统的更目录下的init文件。
此时如果要用nfs挂载,以便于后期测试的话,可以用以下指令(前提是主机要开启nfs服务,这个与下面的进入ramdisk再挂nfs有本质的区别。下面有分析。)
此处的操作不需要上面的烧录ramdisk文件系统到ram了,因为此处/nfs就是上面所做的ramdisk文件系统。板子是通过nfs来访问主机的/nfs,将此当成自己的ramdisk。这样做的目的也是为了开发方便,后面会有体现。
四、启动系统,输入bootm 0x40008000,成功进入shell界面,可以看到自己做的最小系统里的文件了,就是刚刚加到ramdisk里的各种文件了。
五,如果第三步不是用nfs挂的话,在此也是可以挂nfs的。但是有本质的区别。这个时候,文件系统是在ram里的,只是用nfs将主机的一个文件夹挂在ramdisk的一个文件下,如mnt文件夹,而第三步的操作是将整个文件系统放在主机上,区别就在这儿。
挂载之前先配置网络
指令为ifcofig eth0 192.168.0.2 netmask 255.255.255.0 up
配置开发板ip为0.2,与主机0.1在同一个网关
此时ping主机如能ping成功说明配置成功
挂在文件
mount -t nfs 192.168.0.1:/home/bobo/share /mnt -o nolock
- o nolock要加,我之前没有加一直有问题,老是挂不上。
此时在ramdisk文件系统下的mnt文件下就能看到主机/home/bobo/share下的东西了。
这样做是为了向ramdisk里加文件什么的方便,要不然,下面你要加驱动测试程序就要在重新做ramdisk,在压缩之前将所要的所有测试程序等文件加到里面,在压缩,再重新烧,是不是很麻烦呀。好处这不就体现了嘛。
六、加载驱动,测试
1.将ko文件和测试文件led-test拷贝到/home/bobo/share,这是在主机下操作的。
然后在uboot串口端口看mnt下是不是也多了这两个文件啦
2.insmod这个ko文件
3,mknod /dev/led-haibo c 249 0
此处的/dev/led-haibo要和测试文件led-test下的open打开路径一致,设备号要与ko文件里定义的一致。
4,./led-test就可以看到想要的结果了
哈哈,终于写完了,过了好几天才写,前面的一些细节记得不是太清楚了,这是我第一次自己动手认认真真做点东西,反正过程很痛苦,要是有些错误,或步骤遗漏在所难免呀。