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 ...
随机推荐
- 冒泡 MS Azure 不便宜。。。
一直在等 MS Azure 中国开卖, 最近有消息说正式商用了... 看看去,ok 发现官方网站 很奇葩.没有购买的地方 说毛线 啊 卧槽 欺骗感情还是吊人胃口? 好看了一下VM的价格,卧槽真不便宜. ...
- python通过snmp协议运用多线程获取多台主机网卡信息,写入数据库
#-*- coding:utf-8 -*- import netsnmp class SnmpClass(object): """ SNMP ""&q ...
- mysql 开发基础系列16 视图
一. 什么是视图视图是一种虚拟存在的表,行和列数据来自,定义视图的查询中使用的表,并且是在使用视图时动态生成的.优势有: 简单: 使用视图的用户完全不需要关心后面对应的表的结构,关联条件,筛选条件. ...
- centos 7 linux系统默认ftp安装配置和部署(详细讲解)
小生接触 Linux 系统时间不长,想解决linux系统ftp安装及部署问题,折腾了大半天,终于弄出来了,将各路高手的配置方法综合了一下,如有不对之处,欢迎各位看客指正,感谢! 一.声明: 本文采用操 ...
- [总结]数论和组合计数类数学相关(定理&证明&板子)
0 写在前面 0.0 前言 由于我太菜了,导致一些东西一学就忘,特开此文来记录下最让我头痛的数学相关问题. 一些引用的文字都注释了原文链接,若侵犯了您的权益,敬请告知:若文章中出现错误,也烦请告知. ...
- 南大算法设计与分析课程OJ答案代码(3)
问题 A: 动态中位数问题 时间限制: 1 Sec 内存限制: 8 MB提交: 866 解决: 102提交 状态 算法问答 题目描述 输入一组整数a1, a2, …, an ,每输入一个整数,输出 ...
- [转]GitLab Continuous Integration (GitLab CI/CD)
本文转自:https://docs.gitlab.com/ee/ci/README.html GitLab Continuous Integration (GitLab CI/CD) The bene ...
- .net core Identity集成IdentityServer(3) 一键登出
在客户端程序, 我们补充一键登出操作. 使用了idsv之后, 退出的操作需要删除本地cookie, 然后去请求认证服务器, 也删除认证服务器的cookie. 官网给的退出的代码 public asyn ...
- c# 使用迭代器来创建可枚举类型
class Program { public IEnumerator<string> GetEnumerator() { IEnumerable<string> my = Bl ...
- Element-UI 日期范围 date-picke
实际项目应用案例: <el-form-item label="开始日期:" prop="StartDate"> <el-date-picker ...