Chinaunix首页 | 论坛 | 博客
  • 博客访问: 713157
  • 博文数量: 192
  • 博客积分: 2653
  • 博客等级: 少校
  • 技术积分: 1623
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-31 18:25
个人简介

How tough life is, how strong you should be!

文章分类

全部博文(192)

文章存档

2015年(1)

2014年(2)

2013年(37)

2012年(152)

分类: LINUX

2012-07-05 20:40:02

今天终结一下上一周痛苦的ramdisk制作过程、以及用最小文件系统测试简单的驱动。

 

前提是已经稍微研究过uboot,并且已经将uboot烧到flash实现开机可以进入uboot命令界面。

先在kerneldriver下加上你要的驱动文件,然后配置makefilekconfig文件,编译内核,会生成ko文件,此处的资料很多,找找就知道了。

 

一、制作文件系统

方法一:

1dd if=/dev/zero of=/dev/ram0 bs=1k count=4096

         说明:if:从文件读取;of:输出到文件;bs:ibs(输入)obs(输出)设置成指定的字节数;

         count:仅读取指定的区块数,4096=4M

        

2mke2fs -vm0 /dev/ram0 4096

         说明:将RamDisk格式化成ext2文件系统格式,大小为4M

        

3mount /dev/ram0 /home/bobo/haibo

         说明:mount RamDisk,将根文件系统拷贝到/home/bobo/haibo目录下

   做到这一步应该可以看到lost+find文件夹

 

4、向haibo文件夹加入必要的文件夹,这个就不多说了,我试了两种不同的方法,一种是直接下了一个最小文件系统的压缩叫etc.gz的文件,直接解压到haibo文件夹就好,另外一种就是将一个现成的ramdisk文件夹下的所有文件拷贝到haibo里。实验室有同学是自己做的busybox,自己生成文件,其实都一样,就是比较烦,还要自己编写很多文件,都是网上抄,只要能看懂做了哪些事,收获应该都一样。

  这一步完成就做好文件系统了。

 

5umount /home/bobo/haibo

 

6gzip -c9  /dev/ram0 > ramdisk.gzdd if=/dev/ram0 bs=1k count=2048 | gzip -v9 > /tmp/ram_image.gz ramdisk文件系统压缩

 

方法二:

 

1dd if=/dev/zero of=ramdisk bs=1k count=8192

        

2mke2fs -F -m0 ramdisk

 

3mount -o loop ramdisk ./ramdir

 

4dd if=ramdisk bs=1k count=8192 | gzip -v9 > ./ramdisk.gz

 

5mkimage -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  其中initramdisk文件系统的更目录下的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

配置开发板ip0.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文件

3mknod /dev/led-haibo c 249 0

此处的/dev/led-haibo要和测试文件led-test下的open打开路径一致,设备号要与ko文件里定义的一致。

4./led-test就可以看到想要的结果了

 

 

哈哈,终于写完了,过了好几天才写,前面的一些细节记得不是太清楚了,这是我第一次自己动手认认真真做点东西,反正过程很痛苦,要是有些错误,或步骤遗漏在所难免呀。

 

 

 

阅读(1809) | 评论(0) | 转发(1) |
0

上一篇:git的使用

下一篇:module-init的一些知识

给主人留下些什么吧!~~