本文鏈接:https://blog.csdn.net/xuhui_7810/article/details/89225693
客戶有個(gè)需求香罐,需要增加一個(gè)100m大小的分區(qū)时肿,用來存放客戶預(yù)置的資料,并且不能被恢復(fù)出廠設(shè)置刪除螃成。針對這個(gè)需求,客戶的資料肯定不能放在原有的分區(qū)里面寸宏,新增的分區(qū),也不能掛載到原有的分區(qū)目錄下羔巢,否則恢復(fù)出廠設(shè)置時(shí)罩阵,一定會(huì)被清空竿秆。這么看來稿壁,就只能在系統(tǒng)根目錄下,新建個(gè)文件夾傅是,并將客戶分區(qū),掛載到這個(gè)根目錄上才行落午。因?yàn)槲覀冇玫氖莂ndroid9.0,在這套代碼上溃斋,會(huì)有很多的權(quán)限限制,如果沒有配置對梗劫,會(huì)導(dǎo)致各種問題,現(xiàn)記錄如下梳侨。
1.)在device\qcom\msm8953_64\BoardConfig.mk里做如下修改
BOARD_USERDATAIMAGE_PARTITION_SIZE := 9719880090 #9824737690 對應(yīng)的,要從userdata上減100m
BOARD_PERSISTIMAGE_PARTITION_SIZE := 33554432
BOARD_PERSISTIMAGE_FILE_SYSTEM_TYPE := ext4
BOARD_OEMIMAGE_PARTITION_SIZE := 268435456
BOARD_UNRECOVERABLEIMAGE_PARTITION_SIZE := 104857600 #單位為字節(jié)走哺,換算下來就是100m
2.)device\qcom\msm8953_64\non_hlos\SDM450.LA.3.2.1\common\config\partition.xml
//這里的userdata也要對應(yīng)的減少100m
順便說一句,在這個(gè)文件里,有一個(gè)GROW_LAST_PARTITION_TO_FILL_DISK這樣的標(biāo)簽束凑,當(dāng)它設(shè)為true的時(shí)候,表示系統(tǒng)前面分剩下的空間汪诉,全部自動(dòng)分到userdata.img里去谈秫。設(shè)了這個(gè)標(biāo)簽后的表現(xiàn)就是,當(dāng)有些同學(xué)各分區(qū)的大小沒有計(jì)算準(zhǔn)確時(shí)拟烫,比如在16g的板子上,system.img上渴、modem.img等除userdata.img外的所有的分區(qū)一共占了5g喜颁,理論上userdata.img就還剩9g,但是如果某個(gè)同學(xué)在這兩個(gè)配置文件里,計(jì)算有誤半开,將userdata.img的大小寫成了6g,那么就還有3g給浪費(fèi)了奢米。這時(shí)下載完后第一次開機(jī)時(shí)纠永,userdata.img分區(qū)的大小,是下載時(shí)從這些分區(qū)表里讀出來的6g尝江,還有3g空間不見了。但是如果這時(shí)恢復(fù)出廠設(shè)置的話啤覆,系統(tǒng)檢測到GROW_LAST_PARTITION_TO_FILL_DISK這個(gè)標(biāo)簽為true后,會(huì)自動(dòng)將剩下的3g空間也給補(bǔ)到userdata上惭聂。所以建議大家,這個(gè)標(biāo)簽都要設(shè)為true.
3.)\device\qcom\msm8953_64\fstabs-4.9\fstab_non_AB_variant.qti
在最后增加一行:/dev/block/bootdevice/by-name/unrecoverable? ? /unrecoverable? ? ext4? ? defaults? defaults
4.)device\qcom\msm8953_64\msm8953_64.mk里增加一行
PRODUCT_COPY_FILES += device/qcom/msm8953_64/res/unrecoverable.img:$(PRODUCT_OUT)/unrecoverable.img
5.)device\qcom\msm8953_64\non_hlos\SDM450.LA.3.2.1\contents.xml里增加下面代碼
<download_fileminimized="true"fastboot="true"><file_name>unrecoverable.img</file_name><file_path>LINUX/android/out/target/product/msm8953_64/</file_path></download_file>
6.)system\core\rootdir\Android.mk笨觅,在這里內(nèi)置分區(qū)對應(yīng)的目錄
LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/unrecoverable
這里非常重要拦耐,在android9.0上,selinux對系統(tǒng)權(quán)限限制越來越嚴(yán)格了屋摇,不能像之前那樣揩魂,在init.rc或init.target.rc等初始化腳本里進(jìn)行系統(tǒng)根目錄的mkdir操作炮温。也就是說,在android.9.0上牵舵,不能在系統(tǒng)根目錄上創(chuàng)建文件夾了柒啤。如果要在系統(tǒng)根目錄創(chuàng)建文件夾畸颅,有兩個(gè)方法担巩,一是關(guān)閉selinux,二是要將系統(tǒng)根目錄的文件夾没炒,像內(nèi)置app那樣,在編譯時(shí)就給內(nèi)置進(jìn)去送火。
7.)device\qcom\sepolicy\vendor\common\file.te
type unrecoverable_data_file, file_type;//創(chuàng)建文件節(jié)點(diǎn)
8.)device\qcom\sepolicy\vendor\common\file_contexts
/unrecoverable(/.*)?? ? ? ? u:object_r:unrecoverable_data_file:s0//創(chuàng)建文件節(jié)點(diǎn)
9.)device\qcom\sepolicy\vendor\common\device.te
type unrecoverable_block_device,dev_type; //創(chuàng)建設(shè)備節(jié)點(diǎn)
10.)device\qcom\sepolicy\vendor\msm8953\file_contexts
/dev/block/bootdevice/by-name/unrecoverable? ? ? ? ? ? ? ? ? ? ? ? ? ? ? u:object_r:unrecoverable_block_device:s0//創(chuàng)建設(shè)備節(jié)點(diǎn)
11.)device\qcom\sepolicy\vendor\common\adbd.te增加adb訪問權(quán)限
allow adbd unrecoverable_data_file:dir { search open read write add_name create getattr setattr };
allow adbd unrecoverable_data_file:file { open read create write getattr setattr};
12.)device\qcom\sepolicy\vendor\common\init.te增加init進(jìn)程的對分區(qū)設(shè)備文件的操作權(quán)限
allow init unrecoverable_block_device:blk_file rw_file_perms;
allow init unrecoverable_block_device:blk_file relabelto;
13.)device\qcom\sepolicy\vendor\common\platform_app.te
allow platform_app unrecoverable_data_file:dir { search open read write add_name create getattr setattr };
allow platform_app unrecoverable_data_file:file { open read create write getattr setattr};
14.)device\qcom\sepolicy\vendor\common\recovery.te
allow recovery unrecoverable_block_device:blk_file *;
15.)device\qcom\sepolicy\vendor\common\system_app.te
allow system_app unrecoverable_data_file:dir { search open read write add_name create getattr setattr };
allow system_app unrecoverable_data_file:file { open read create write getattr setattr};
16.)device\qcom\sepolicy\vendor\common\system_server.te
allow system_server unrecoverable_data_file:dir { search open read write add_name create getattr setattr };
allow system_server unrecoverable_data_file:file { open read create write getattr setattr};
17.)device\qcom\sepolicy\vendor\common\vold.te
allow vold unrecoverable_data_file:dir r_dir_perms;
allow vold unrecoverable_block_device:blk_file rw_file_perms;
allow vold unrecoverable_block_device:blk_file create_file_perms;
allow vold unrecoverable_data_file:dir { read getattr open ioctl };
18.)device\qcom\sepolicy\vendor\common\shell.te
r_dir_file(shell, unrecoverable_data_file)
allow shell unrecoverable_data_file:dir { search open read write add_name create getattr setattr };
allow shell unrecoverable_data_file:file { open read create write getattr setattr};
19.)device\qcom\msm8953_64\init.target.rc
chown root root /unrecoverablechmod 0777 /unrecoverablerestorecon_recursive /unrecoverable
其中拳话,如果不做第18、19步的話种吸,會(huì)導(dǎo)在user版本上弃衍,插上usb后坚俗,進(jìn)入adb shell時(shí)镜盯,看不到新增加的分區(qū)。
20.)將制作好的.img文件猖败,放到device\qcom\msm8953_64\res這個(gè)目錄下恩闻。
————————————————
版權(quán)聲明:本文為CSDN博主「xuhui_7810」的原創(chuàng)文章艺糜,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議判呕,轉(zhuǎn)載請附上原文出處鏈接及本聲明侠草。
原文鏈接:https://blog.csdn.net/xuhui_7810/article/details/89225693
作者:guoyongcan
鏈接:http://www.reibang.com/p/d9627a674769
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)边涕,非商業(yè)轉(zhuǎn)載請注明出處晤碘。