android 系统上kernel与文件系统是打包到一块的。
一般烧录文件的时候有kernel,system,userdata分区。
我们在编译之后,在out目录下生成了
如上图所示目录文件
其中system分区如下所示:
root分区如下所示:
我们查看mk-ics.sh 在kernel编译的时候有这么一句
make -j $JOBS uImage CONFIG_INITRAMFS_SOURCE="../out/target/product/godbox/root"
后面就是拷贝了,config_initramfs_source 这是指明了ramfs文件系统的路径
这个路径就是我们刚才看到的root目录,这个目录下是一个完整的文件系统。
之前一直理解成烧录的system是文件系统,其实不是,system只是文件系统 根目录下的system分区。
与之前的linux平台不同,linux平台的文件系统与kernel是分离开的,文件系统很大,android上的文件系统很小,与kernel打包到一块也不过是几M
但是linux上面的文件系统有40多M。
我修改了源码目录下/system/core/init/init.c文件,查看此目录下的makefile 有这么一句
include $(BUILD_EXECUTABLE)
这也就是说 编译成一个可执行文件
LOCAL_MODULE:= init
编译完成的名称是init,在编译过程中,可以看到生成init文件是生成在刚才的root目录下的
因为编译kernel的过程中,将该root目录一块打包到kernel文件里面了,所以直接使用adb push 命令替换/init文件是不可以的。