修改device
由于不同的机型情况不一样这里只列举一些常见的修改,启动到rootfs应该是没什么问题的。
准备好一个可以用的git平台账号,fork目标机型的lineage os 16适配就可以开始弄了。
去掉脚本删除不掉的JAR包
Halium 从9开始提供了处理jar和apk内容的工具脚本会自动清除掉vendor里BoardConfigVendor.mk和device里proprietary-files.txt的jar和apk,但是device里的device.mk里仍然存在一些没有处理掉的jar包。得注释掉,特征是以PRODUCT_BOOT_JARS开头
#PRODUCT_BOOT_JARS += \
# telephony-ext
加入ubuntu touch特有的包
为了ubuntu touch的图形界面能够正确利用libhybris,安卓容器必须编译上特定的包。
在device.mk尾部加入以下内容
MINIMEDIA_SENSORSERVER_DISABLE := 1
PRODUCT_PACKAGES += \
libmedia_omx \
android.frameworks.displayservice@1.0
PRODUCT_PACKAGES += \
libion \
libmedia_compat_layer \
libsf_compat_layer \
libui_compat_layer
# SalifishOS droidmedia
PRODUCT_PACKAGES += \
libdroidmedia \
minimediaservice \
minisfservice \
miniafservice
# Ubuntu
PRODUCT_PACKAGES += \
libbiometry_fp_api \
libubuntu_application_api
修改内核cmdline
在device的BoardConfig.mk里Ubuntu Touch的启动依赖于以下两个内核参数.
# CMDLINES for Halium
BOARD_KERNEL_CMDLINE += console=tty0
BOARD_KERNEL_CMDLINE += apparmor=1 security=apparmor
在BOARD_KERNEL_CMDLINE集中的地方加入这个就行
修改内核的defconfig (可选)
如果想和原来的内核defconfig区分开来可以把适用于Halium的内核defconfig单独命名。修改BoardConfig.mk里TARGET_KERNEL_CONFIG的值,使得编译时采用适用于Halium的内核配置
TARGET_KERNEL_CONFIG := clover_halium_defconfig
去掉hostapd的闭源库
高通的闭源hostapd库和ubuntu rootfs里的有冲突,得去掉。注释掉BoardConfig.mk里的这两行
#BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE)
#BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE)
修改fstab
fstab里不能存在分f2fs和context=这两个内容,需要在fstab里去掉,如果使用了f2fs注意在twrp中把它格式化成ext4格式,Halium不支持f2fs。
以下只是一个例子
修改 rootdir/etc/fstab.qcom
/dev/block/bootdevice/by-name/modem /vendor/firmware_mnt vfat ro,shortname=lower,uid=0,gid=1000,dmask=227,fmask=337,context=u:object_r:firmware_file:s0 wait
为
/dev/block/bootdevice/by-name/modem /vendor/firmware_mnt vfat ro,shortname=lower,uid=0,gid=1000,dmask=227,fmask=337 wait
收集设备的UDEV规则
这时需要一个能够正常工作的twrp,最好是刷了lineage os 16以后的twrp,还需要电脑有adb。
adb shell以后执行如下指令
cat /s/ueventd*.rc /vendor/ueventd*.rc | grep ^/dev | sed -e 's/^\/dev\///' | awk '{printf "ACTION==\"add\", KERNEL==\"%s\", OWNER=\"%s\", GROUP=\"%s\", MODE=\"%s\"\n",$1,$3,$4,$2}' | sed -e 's/\r//' > /data/70-机型的codename.rules;
然后取回来
adb pull /data/70-机型的codename.rules
在device项目里新建ubports文件夹
放入收集回的udev规则和新建scaling.conf
scaling.conf 内容如下
# Empty config file used by the bind mount (logic in the initrd)
GRID_UNIT_PX=24
QTWEBKIT_DPR=2.0
FORM_FACTOR=handset
在device.mk之中加入拷贝这些文件的语句
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/ubports/70-clover.rules:system/halium/lib/udev/rules.d/70-android.rules \
$(LOCAL_PATH)/ubports/scaling.conf:system/ubuntu/etc/ubuntu-touch-session.d/android.conf
加入halium.mk
在lineage_机型名.mk中注释掉带full和telephony的.mk文件之后再加入halium.mk
#$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base.mk)
# Halium
$(call inherit-product, $(SRC_TARGET_DIR)/product/halium.mk)
# Inherit some common Lineage stuff
#$(call inherit-product, vendor/lineage/config/common_full_tablet_wifionly.mk)
#$(call inherit-product, vendor/lineage/config/telephony.mk)
编译android-rootfs.img而不是system.img
在BoardConfig.mk中加入以下内容
# To enable system image
BOARD_BUILD_SYSTEM_ROOT_IMAGE := true