Chinaunix首页 | 论坛 | 博客
  • 博客访问: 433962
  • 博文数量: 53
  • 博客积分: 2746
  • 博客等级: 少校
  • 技术积分: 829
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-14 10:41
文章分类

全部博文(53)

文章存档

2016年(2)

2013年(1)

2012年(7)

2011年(10)

2010年(5)

2009年(20)

2008年(8)

我的朋友

分类: LINUX

2012-03-22 16:24:40

 作者:龙金东

序:

这几天在mcs8142上实现star8132上的所有功能;都已经用的是squashfs文件系统,star8132文件系统用的是uClibc0.8.28的库,而mcs8142glibc的库;所以都是8Mflash,mcs8142容量空间不够。要想再去减小mcs8142sambatransmission等应用的容量,难度提大的,前面也试过,还找不到方法去减。现在就想通过在kernel上加sqlzma(squashfs + lzma),来解决flash空间不够的问题。

 

那就开始吧。

一、开发环境:

1.       host: Fedora8

2.       target: mcs8142star8132(ARM)

3.       arm-kernel: mcs8142-linux 2.6.15star8132-linux2.6.16.

4.       toolchain: mcs8142—>arm-linux-gcc- 3.4.4star8132—>1arm-linux-gcc-3.4.1

5.       export PATH=/usr/local/arm-longjindong//bin:$PATH

二、下载squashfs lzma

1. 创建工作目录:

1 mkdir –p  /home/longjindong/squashfs

2 cd  /home/longjindong/squashfs; #以后都在这里生活了。

3)  mkdir lzma457                #下面要用到。

       2. 下载

1wget

2wget

3wget

好像这些连接不能用了。我把这些包附上来了。 src.rar  

       3. copy kernel

              1)star8132kernel:

               cp –a /home/longjindong/star/star8132/kernel/linux-2.6.16  .

       2)mcs8142kernel:

         cp –a /home/longjindong/moschip/mcs8142/kernel/linux-2.6.15  .

说明一下:a. squashfs3.4.tar.gz—squashfs文件包;

b. lzma457.tar.bz2—7Z压缩解压算法库;

c. sqlzma3.4-457.tar.bz2—squashfs工具、kernel相关补丁(patch)和Makefile.

三、解压文件和打patch

1、  解压上面下载的3个文件包:

1)  tar xvf squashfs3.4.tar.gz

2)  tar xvf lzma457.tar.bz2 –C lzma457

3)  tar xvf sqlzma3.4-457.tar.bz2

2、  patch:

1)      lzma457patch

patch  -p0 < sqlzma1-457.patch

2)      squashfs3.4工具patch

patch  -p0 < sqlzma2u-3.4.patch

3)      kernelpatch 这里先patch  linux 2.6.16

a.            patch -p0 <  squashfs3.4/kernel-patches/linux-2.6.16

b.          cp sqlzma2k-3.4.patch sqlzma2k-3.4.patch-16

c.           vi sqlzma2k-3.4.patch-16 ,然后”:% s/ linux-2.6.27.4/ linux-2.6.16/g”

(这是为了修改为linux-2.6.16版本)

d.          patch –p0 < sqlzma2k-3.4.patch-16

4)      改变squashfs3.4目录里的linux-2.6.16目录为链接文件

a.           cd squashfs3.4/kernel-patches/

b.          mv linux-2.6.16  linux-2.6.16-b

c.           ln –sf  /home/longjindong/squashfs/linux-2.6.16;cd –

5)      /home/longjindong/squashfs里的Makefile

   vi  Makefile     #把第16行改成KVer = linux-2.6.16

6)      lzma相关文件copylinux-2.6.16/fs/squashfs/

cp -a sqlzma.h sqmagic.h ./lzma457/C/Compress/Lzma/{LzmaDecode.h,LzmaDecode.c,LzmaTypes.h,uncomp.c} linux-2.6.16/fs/squashfs/

 

如果不copy这此文件编译时会出现如下警告,并不能正常使用.

 

                    

                  
  1. ***Warning:"sqlzma_fin"[/home/longjindong/squashfs/squashfs3.4/kernel-patches/linux- 2.6.15/fs/squashfs/squashfs.ko] undefined!
  2. ***Warning:"sqlzma_un"[/home/longjindong/squashfs//squashfs3.4/kernel-patches/linux- 2.6.15/fs/squashfs/squashfs.ko] undefined!
  3. ***Warning:"sqlzma_init"[/home/longjindong/squashfs/squashfs3.4/kernel-patches/linux-2.6.15/fs/squashfs/squashfs.ko] undefined!

点击(此处)折叠或打开


7)      vi linux-2.6.16/fs/squashfs/Makefile #加上如下二行:

squashfs-y += uncomp.o

squashfs-y += LzmaDecode.o

8)      linux-2.6.16/fs/squashfs/inode.c中的static int __init init_squashfs_fs(void)函数里的kmalloc改成vmalloc, static void free_sqlzma(void) 函数里的kfree改成vfree.不然后会出如下警告并不能正常使用.

 

***Warning:"__you_cannot_kmalloc_that_much"[/home/longjindong/moschip/mos8142/src/squashfs3.4/kernel-patches/linux-2.6.15/fs/squashfs/squashfs.ko] undefined!

 

 

.  

            1. kotools

     make

     完后,ko: squashfs3.4/kernel-patches/linux-2.6.16/fs/squashfs/squashfs.ko

             ./lzma457/C/Compress/Lzma/kmod/sqlzma.ko

             ./lzma457/C/Compress/Lzma/kmod/unlzma.ko

     Tools :  ./squashfs3.4/squashfs-tools/unsquashfs

             ./squashfs3.4/squashfs-tools/mksquashfs

2. kernelsqlzma分区起动系统

    1) cd linux-2.6.16

    2) make menuconfig

    3) File systems ---> Miscellaneous filesystems ---> <*> SquashFS 3.4 - Squashed file system support

     4)  make

        正常的话kenrel image就是arch/arm/boot/zImage

五.用mksquashfs 做文件系统

   mksquashfs source1 source2 ...  dest  -all-root –lzmadic 1024K

到这里重点部分就完了。

 

六.现在来做mcs8142sqlzma

    除了打linux-2.6.15补丁不同外,其它和上面一样。下面就说给它patch的事。

    1.cp squashfs3.4/kernel-patches/ linux-2.6.14 squashfs3.4/kernel-patches/ linux-2.6.15-b

      说明:这里我要2.6.14patch,试过2.6.16patch打不了,没去深究。

    2.把squashfs3.4/kernel-patches/linux-2.6.15-b/squashfs3.4-patch里所有的linux-2.6.14改成linux-2.6.15

    3.  patch –p0 < squashfs3.4/kernel-patches/linux-2.6.15-b/squashfs3.4-patch 

    4.  cp sqlzma1-457.patch sqlzma1-457.patch-15

    5.  sqlzma1-457.patch-15里所有的linux-2.6.27.4改成linux-2.6.15

    6.  patch –p0 < sqlzma1-457.patch-15   #到这里就有点麻烦了,patch失败了。提示如下:

   [longjindong@bogon squashfs]$ patch -p0 < src/sqlzma2k-3.4.patch-15


 

点击(此处)折叠或打开

  1. patching file linux-2.6.15/include/linux/squashfs_fs.h
  2. patching file linux-2.6.15/include/linux/squashfs_fs_sb.h
  3. Hunk #1 FAILED at 63.
  4. 1out of 1 hunk FAILED -- saving rejects to file linux-2.6.15/include/linux/squashfs_fs_sb.h.rej
  5. patching file linux-2.6.15/fs/squashfs/inode.c
  6. Hunk #1 succeeded at 44 with fuzz 2 (offset 9 lines).
  7. Hunk #2 FAILED at 267.
  8. Hunk #3 FAILED at 310.
  9. Hunk #4 FAILED at 369.
  10. Hunk #5 succeeded at 1104 (offset -26 lines).
  11. Hunk #6 FAILED at 1116.
  12. Hunk #7 succeeded at 1173 (offset 9 lines).
  13. Hunk #8 succeeded at 1213 (offset -26 lines).
  14. Hunk #9 succeeded at 1264 (offset 9 lines).
  15. Hunk #10 succeeded at 1286 (offset -25 lines).
  16. Hunk #11 succeeded at 1346 (offset 9 lines).
  17. Hunk #12 succeeded at 1326 (offset -25 lines).
  18. Hunk #13 succeeded at 1522 (offset 9 lines).
  19. Hunk #14 succeeded at 2126 (offset -25 lines).
  20. Hunk #15 succeeded at 2173 (offset 8 lines).
  21. Hunk #16 succeeded at 2206 (offset -25 lines).
  22. Hunk #17 succeeded at 2291 (offset 11 lines).
  23. 4 out of 17 hunks FAILED -- saving rejects to file linux-2.6.15/fs/squashfs/inode.c.rej
  24. patching file linux-2.6.15/fs/squashfs/Makefile


 

  从上面可以看出,其实只要根据squashfs_fs_sb.h.rej,手动改squashfs_fs_sb.h;根据

inode.c.rej手动改inode.c,就可以了。这里只是个手工活,不也要细心哦。

 

END

  这此工作做完后,下载到板,能正常启动,目标达到;此外flash还可以再装一些应用。

 

 

 

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

dino_cheng2012-03-22 17:08:51

拜读