需求描述
在Android根目录下新增一个tmp目录,根目录下的/tmp是指向/var/tmp
解决方案
diff --git a/system/core/rootdir/Android.mk b/system/core/rootdir/Android.mk
old mode 100644
new mode 100755
index aa5a520..3696109
--- a/system/core/rootdir/Android.mk
+++ b/system/core/rootdir/Android.mk
@@ -121,10 +121,11 @@ endif
#
# create some directories (some are mount points) and symlinks
LOCAL_POST_INSTALL_CMD := mkdir -p $(addprefix $(TARGET_ROOT_OUT)/, \
- sbin dev proc sys system data oem acct config storage mnt root $(BOARD_ROOT_EXTRA_FOLDERS)); \
+ sbin dev proc sys system data oem acct config storage mnt root var $(BOARD_ROOT_EXTRA_FOLDERS)); \
ln -sf /system/etc $(TARGET_ROOT_OUT)/etc; \
ln -sf /sys/kernel/debug $(TARGET_ROOT_OUT)/d; \
- ln -sf /storage/self/primary $(TARGET_ROOT_OUT)/sdcard
+ ln -sf /storage/self/primary $(TARGET_ROOT_OUT)/sdcard; \
+ ln -sf /var/tmp $(TARGET_ROOT_OUT)/tmp
ifdef BOARD_USES_VENDORIMAGE
LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/vendor
else
diff --git a/system/core/rootdir/init.rc b/system/core/rootdir/init.rc
index f0b741e..a695ddc 100755
--- a/system/core/rootdir/init.rc
+++ b/system/core/rootdir/init.rc
@@ -72,8 +72,11 @@ on init
# Mount staging areas for devices managed by vold
# See storage config details at http://source.android.com/tech/storage/
mount tmpfs tmpfs /mnt mode=0755,uid=0,gid=1000
+ mount tmpfs tmpfs /var mode=0777,uid=0,gid=1000
restorecon_recursive /mnt
+ mkdir /var/tmp 0777 root system
+
mount configfs none /config
chmod 0775 /config/sdcardfs
chown system package_info /config/sdcardfs
方案分析
- 在root目录下创建新文件夹的方式
system/core/rootdir/Android.mk
LOCAL_POST_INSTALL_CMD := mkdir -p $(addprefix $(TARGET_ROOT_OUT)/, \
sbin dev proc sys system data oem acct config storage mnt root $(BOARD_ROOT_EXTRA_FOLDERS)); \
# 在这里添加新目录名称即可
- 创建软链接的方式
#一是symlink
system/core/rootdir/init.rc
#将/var/tmp软链接到/tmp
symlink /var/tmp /tmp
#二是ln
/system/bin下的命令很多都是软链接来了,该软链接是在编译Android源码时生成的,而symlink是动态创建的。
system/core/rootdir/Android.mk
#将/var/tmp软链接到/tmp
ln -sf /var/tmp $(TARGET_ROOT_OUT)/tmp
- 挂载文件及其权限
mount tmpfs tmpfs /var mode=0777,uid=0,gid=1000
- 创建根目录的二级目录及其权限
mkdir /var/tmp 0777 root system
扩展
- 查看文件挂载信息adb命令
df -h
mount
#内存空间
free -m
- 虚拟内核文件系统(VirtualKernel File Systems)
#proc
proc文件系统为操作系统本身和应用程序之间的通信提供了一个安全的接口.
但是devfs文件系统有一些缺点,有时一个设备映射的设备文件可能不同
#devfs
使用devfs来提供一种类似于文件的方法来管理位于/dev目录下的所有设备.
#sysfs
为了克服devfs的上述问题,2.6内核引入了一个新的文件系统sysfs,它挂载于/sys目录下.
sysfs文件系统把连接在系统上的设备和总线组织成为一个分级的文件,用户空间的程序同样可以利用这些信息,以实现和内核的交互.
#tmpfs
tmpfs(temporary filesystem)是Linux特有的文件系统,标准挂载点是/dev/shm,默认大小是实际内存的一半.
- 分析系统启动流程
system/core/init/init.cpp
// Get the basic filesystem setup we need put together in the initramdisk
// on / and then we'll let the rc file figure out the rest.
if (is_first_stage) {
mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755");
mkdir("/dev/pts", 0755);
mkdir("/dev/socket", 0755);
mount("devpts", "/dev/pts", "devpts", 0, NULL);
#define MAKE_STR(x) __STRING(x)
mount("proc", "/proc", "proc", 0, "hidepid=2,gid=" MAKE_STR(AID_READPROC));
mount("sysfs", "/sys", "sysfs", 0, NULL);
}