Android根文件系统认识

        根文件系统是Linux系统一种特殊的文件系统,Android是基于Linux的,当然也根文件系统,那么在Android平台上,根文件系统是如何实现的呢?

1,Android是使用busybox构建根文件系统

Linux Kernel需要一个根文件系统来启动用户程序init,这个最根本的文件系统叫做根文件系统。不单纯是Android,所有其它的基于Linux Kernel的系统都需要这个根文件系统,在Android系统中,它的表现为:
  • 在uboot bootargs中表现为ramfs
          bootargs=rootfstype=ramfs init=/init console=ttyS0,115200
  • 在系统中,挂载为rootfs
          rootfs / rootfs ro,seclabel 0 0
那么ramfs与rootfs又是什么关系?
其实,ramfs是一类文件系统,像tmpfs,procfs等等都是属于ramfs,指是没有实际存储设备的一种内存文件系统。rootfs是ramfs的一种。
2,Android是如何构建rootfs的?
Android是通过使用busybox这个开源系统来构建根文件系统的。代码位于external/busybox。busybox在很多嵌入式系统使用为根文件系统。是一个跨平台,很优秀的开源项目。具体可以参考(https://www.busybox.net/ )。Android使用的busybox是一个bionic分支,应该是Android平台上的一个移植版本。
WARNING : THIS IS A BIONIC VERSION OF BUSYBOX, DO NOT USE “make” IN THIS TREE
编译这个目录会在out目录生成一个可执行文件busybox。
执行INSTALL之后,会在out目录生成一个root/文件夹,以及一些这个文件夹下面最基本几个目录。
    
    
  1. ...
  2. drwxrwxr-x 2 xugangfeng xugangfeng 4096 11 23 13:37 system
  3. drwxrwxr-x 2 xugangfeng xugangfeng 4096 11 23 13:37 sys
  4. drwxrwxr-x 2 xugangfeng xugangfeng 4096 12 5 15:07 sbin
  5. drwxrwxr-x 2 xugangfeng xugangfeng 4096 11 23 13:37 proc
  6. drwxrwxr-x 2 xugangfeng xugangfeng 4096 11 23 13:37 oem
  7. drwxrwxr-x 2 xugangfeng xugangfeng 4096 11 23 13:38 boot
  8. ...
?具体如何安装生成的?
当Android的系统系统编译其它目录时,像system/core/init/就会直接把Init可执行文件安装到root目录下面。
整个源码编译完成之后,就执行打包程序,把root/目录打包成一个ramdisk.img的镜像文件,最后会跟Kernel Image一起打包到boot.img里面去。在out目录,也能看到ramdisk.img。
在device下面的项目Kernel.mk里面可以看到打包的过程
    
    
  1. ...
  2. 99 .PHONY: bootimage-quick
  3. 100 bootimage-quick: $(INTERMEDIATES_KERNEL)
  4. 101 cp -v $(INTERMEDIATES_KERNEL) $(INSTALLED_KERNEL_TARGET)
  5. 102 out/host/linux-x86/bin/mkbootfs $(PRODUCT_OUT)/root |
  6. 103 out/host/linux-x86/bin/minigzip > $(PRODUCT_OUT)/ramdisk.img
  7. 104 out/host/linux-x86/bin/mkbootimg --kernel $(INTERMEDIATES_KERNEL)
  8. 105 --base 0x0
  9. 106 --kernel_offset 0x1080000
  10. 107 --ramdisk $(PRODUCT_OUT)/ramdisk.img
  11. 108 $(BOARD_MKBOOTIMG_ARGS)
  12. 109 --output $(PRODUCT_OUT)/boot.img
  13. 110 ls -l $(PRODUCT_OUT)/boot.img
  14. 111 echo "Done building boot.img"
  15. ...
3,Hack Ramdisk.img文件,用如下的步骤就能把ramdisk.img解压成root/目录了,修改一些文件,然后压缩即可。
解压缩命令
1)mv ramdisk.img ramdisk.img.gz                             //  gunzip 默认文件名必须为 .gz 后缀, 因此需要重命名为 .gz
2)  gunzip ramdisk.img.gz                                            //  将解压缩生成  ramdisk.img 文件
3)  mkdir  ramdisk_decompress
4) cd ramdisk_decompress
5) cpio -i -F ../ramdisk.img                                            // 所有ramdisk 文件将被解压在   ramdisk_decompress 目录
重新压缩生成 ramdisk.img
6)cpio -i -t -F ramdisk.img > list                                  //生成 ramdisk 文件列表
7)cpio -o -H newc -O ramdisk_new.img < list            // 生成新的 ramdisk
8)  gzip ramdisk_new.img  
9)  mv ramdisk_new.img.gx  ramdisk.img                    // 生成最终可以下载使用的 ramdisk.img
4,构建自己的根文件系统
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值