Makefile中通过sed命令生成文件系统的selinux的配置文件vendor_filesystem_config.txt
今天在编译android-O(8.0)的时候,我自己新增加了一个ext4格式的分区,在编译这个分区的时候,需要对应的生成文件系统的配置文件xxxx_filesystem_config.txt,发现了生成这个配置文件的的Makefile里面,调用了sed命令来处理一些字符串:
build/core/Makefile
define fs_config
(cd $(1); find . -type d | sed 's,$$,/,'; find . \! -type d) | cut -c 3- | sort | sed 's,^,$(2),' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC)
endef
$(call fs_config,$(zip_root)/VENDOR,vendor/) > $(zip_root)/META/vendor_filesystem_config.txt
刚开始看的有点晕,一句命令很长,我们拆分开来一个个分析:
cd $(1), 进入到指定的目录
find . -type d | sed 's,$$,/,'; 查找当前目录下所有的子目录,如果以$结尾的,使用/替换$
find . \! -type d 查找当前目录下所有的非目录文件
cut -c 3- 去掉字符串的前面两个字符
Sort 排序
sed 's,^,$(2) 字符串开头加上指定字符串
我们来看看,这一系列的命令到底做了哪些动作:
给出的调用是,用来生成vendor的系统配置文件:
具体流程如下:
cd $(1), 进入到源文件目录:
out/target/product/xxxx/obj/PACKAGING/target_files_intermediates/xxxx-target_files-20170714/VENDOR
find . -type d | sed 's,$$,/,' 查找目录文件:
.
./lib64
./lib64/mediadrm
./lib64/hw
./lib64/soundfx
./package_config
./etc
./etc/bluetooth
./etc/seccomp_policy
......
find . \! -type d 查找非目录文件:
./lib64/libwpa_client.so
./lib64/libsurfaceoverlay_jni.so
./lib64/mediadrm/libdrmclearkeyplugin.so
./lib64/libril.so
./lib64/libfbcnf.so
./lib64/libamavutils.so
......
cut -c 3- 取第三个字符开始的数据
lib64
lib64/mediadrm
lib64/hw
lib64/soundfx
package_config
etc
etc/bluetooth
etc/seccomp_policy
....
lib64/libwpa_client.so
lib64/libsurfaceoverlay_jni.so
lib64/mediadrm/libdrmclearkeyplugin.so
lib64/libril.so
lib64/libfbcnf.so
lib64/libamavutils.so
....
Sort 排序
etc
etc/bluetooth
etc/seccomp_policy
lib64
lib64/hw
lib64/libamavutils.so
lib64/libfbcnf.so
lib64/libril.so
lib64/libsurfaceoverlay_jni.so
lib64/libwpa_client.so
lib64/mediadrm
lib64/mediadrm/libdrmclearkeyplugin.so
lib64/soundfx
package_config
sed 's,^,$(2) 没一行前面加上 vendor/
vendor/
vendor/etc
vendor/etc/bluetooth
vendor/etc/seccomp_policy
vendor/lib64
vendor/lib64/hw
vendor/lib64/libamavutils.so
vendor/lib64/libfbcnf.so
vendor/lib64/libril.so
vendor/lib64/libsurfaceoverlay_jni.so
vendor/lib64/libwpa_client.so
vendor/lib64/mediadrm
vendor/lib64/mediadrm/libdrmclearkeyplugin.so
vendor/lib64/soundfx
vendor/package_config
至此,包含了对vendor下的所有文件以及目录的集合,然后执行:
out/host/linux-x86/obj/EXECUTABLES/fs_config_intermediates/fs_config -C -D out/target/product/xxxx/ -S target/product/xxxx/obj/ETC/file_contexts.bin_intermediates/file_contexts.bin
会根据file_contexts.bin中配置的selinux权限,对上述集合中所以的目录以及非目录文件,赋予相应的selinux权限,然后生成vendor_systemfile_config.txt:
vendor 0 2000 755 selabel=u:object_r:vendor_file:s0 capabilities=0x0
vendor/app 0 2000 755 selabel=u:object_r:vendor_app_file:s0 capabilities=0x0
vendor/app/AppInstaller 0 2000 755 selabel=u:object_r:vendor_app_file:s0 capabilities=0x0
vendor/app/AppInstaller/AppInstaller.apk 0 0 644 selabel=u:object_r:vendor_app_file:s0 capabilities=0x0
vendor/app/BluetoothRemote 0 2000 755 selabel=u:object_r:vendor_app_file:s0 capabilities=0x0
vendor/app/BluetoothRemote/BluetoothRemote.apk 0 0 644 selabel=u:object_r:vendor_app_file:s0 capabilities=0x0
vendor/app/DLNA 0 2000 755 selabel=u:object_r:vendor_app_file:s0 capabilities=0x0
vendor/app/DLNA/DLNA.apk 0 0 644 selabel=u:object_r:vendor_app_file:s0 capabilities=0x0
vendor/app/DLNA/lib 0 2000 755 selabel=u:object_r:vendor_app_file:s0 capabilities=0x0
vendor/app/DLNA/lib/arm 0 2000 755 selabel=u:object_r:vendor_app_file:s0 capabilities=0x0
vendor/app/DLNA/lib/arm/libhisivideo19.so 0 0 644 selabel=u:object_r:vendor_app_file:s0 capabilities=0x0
vendor/app/DLNA/lib/arm/libhisivideo_3798m.so 0 0 644 selabel=u:object_r:vendor_app_file:s0 capabilities=0x0
至此,Makefile中通过sed命令,生成分区文件系统的selinux的配置文件。
Makefile中通过sed命令生成文件系统的selinux的配置文件vendor_filesystem_config.txt的更多相关文章
- Linux中使用sed命令或awk命令修改常规配置文件
一.方案: Linux中使用sed命令或awk命令修改常规配置文件 二.步骤: 1.假设有一个a.txt,内容如下: #!/bin/bash aa= bbb= ccc= #ddd= 2.如果想要把里面 ...
- Makefile Shell 脚本;sed命令
1. 在Makefile中想使用shell脚本,需要添加"@"符号,例如: @if [ -d xxx ]; then \ //-d 判 ...
- JNI中使用cl命令生成DLL文件
问题描述: 在使用JNI调用DLL时,首先需要生成DLL文件 问题解决: (1)现在使用VS2008的cl.exe程序,生成DLL文件 (1.1)cl.exe环境搭建 注: cl. ...
- Linux中的sed命令
sed - stream editor for filtering and transforming text 流编辑器的过滤和转换文本 sed [-nerf] [动作] 参数: -i 修改源文件 危 ...
- Linux中使用sed命令替换字符串小结
sed替换的基本语法为: sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的 ...
- 在shell中使用sed命令替换/为\/
sed命令相关: https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html https://www.cnblogs.com/D ...
- WCF中可以使用SVCUtil.exe生成客户端代理类和配置文件
1.找到如下地址“C:\Windows\System32\cmd.exe” 命令行工具,右键以管理员身份运行(视系统是否为win7 而定) 2.输入如下命令: C:\>cd C ...
- 【转】linux中的sed命令
转自:http://www.cnblogs.com/shineshqw/articles/1978122.html 功能说明: 利用script来处理文本文件. 语 法:sed [-hnV][-e&l ...
- linux shell中使用sed命令
例1:批量的将变量的值代替指定文件中的指定内容. #!/bin/bash for i in {1..100} mgr_port=`expr $i + 5345` data_port=`expr $i ...
随机推荐
- oracle批量去掉字段值空格
--查询验证 select ltrim(col1) from t1; --去掉字段值左边空格update t1 set col1=ltrim(col1); --去掉字段值右边空格update t1 s ...
- IntelliJ IDEA中用Git插件操作
- 浅谈canvas中的拖尾效果
引言 很早就想了解以下 canvas 中的拖尾效果(如彗星,烟花等效果)是怎么实现的,但是一直没有深入了解,正巧在 codepen 上看到一个 demo,代码简单,效果炫酷,故有此文. 什么黑科技 在 ...
- 【原创】《windows驱动开发技术详解》第4章实验总结一
目录 1 实验要求 2 编写过程 2.1 确立整体架构 2.1.1 入口函数——DriverEntry 2.1.2 自定义创建设备函数——CreateDevice 2.1.3 卸载函数——Driver ...
- SpringBoot系列——aop 面向切面
前言 项目中我们经常会用到aop切面,比如日志记录:这里简单记录一下springboot是如何使用aop spring对aop的配置,来自springboot参考手册,Common applicati ...
- python下载安装BeautifulSoup库
python下载安装BeautifulSoup库 1.下载https://www.crummy.com/software/BeautifulSoup/bs4/download/4.5/ 2.解压到解压 ...
- [React] immutable.js
//Map() 原生object转Map对象 (只会转换第一层,注意和fromJS区别) immutable.Map({name:'danny', age:18}) //List() 原生array转 ...
- Win10一周年纪念版,瞧一瞧Linux子系统
Bash Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令.Bash还能从文件中读取命令,这样的文件称为脚本.和其他Unix shell 一样,它支持文件名替换(通配符匹配) ...
- Java集合类根接口:Collection 和 Map
前言 在前文中我们了解了几种常见的数据结构,这些数据结构有着各自的应用场景,并且被广泛的应用于编程语言中,其中,Java中的集合类就是基于这些数据结构为基础. Java的集合类是一些非常实用的工具类, ...
- Flask 系列之 SQLAlchemy
SQLAlchemy 是一种 ORM 框架,通过使用它,可以大大简化我们对数据库的操作,不用再写各种复杂的 sql语句 了. 说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环 ...