Android-x86和Linux的通用內核
4 人贊了文章
附件更新:之前忘了CONFIG_NO_GPU_AUTHENTICATION=y,導致啟動安卓黑屏
摘要:可以使用同一個內核(及對應內核模塊)分別啟動Android-x86系列的系統和標準Linux系統的內核配置。當然也可以同時啟動兩個系統(還不成熟)。
正文:
1、內核選用的是Android-x86項目的內核,目前內核版本為4.9.31。
Android-x86項目的內核與Linux主線內核差距不大。可以通過提取補丁對比來看,基本上就是添加了安卓所需要的一些驅動,修復了主線內核在某些顯卡上啟動surfacefinger黑屏等等問題。
2、獲取內核源碼:
- git clone -b kernel-4.9 https://git.code.sf.net/p/android-x86/kernel android-x86-kernel
複製代碼
3、配置內核
為了保證能啟動標準Linux桌面系統,以Ubuntu為例,採用Ubuntu系統內核的config配置文件為基礎,添加配置安卓x86所必須驅動。
**安卓必須驅動:
- CONFIG_ANDROID=y
- CONFIG_ANDROID_BINDER_IPC=y
- CONFIG_ANDROID_BINDER_DEVICES="binder"
- # CONFIG_ANDROID_BINDER_IPC_32BIT is not set
- CONFIG_ASHMEM=y
- CONFIG_ANDROID_LOW_MEMORY_KILLER=y
- CONFIG_ANDROID_LOW_MEMORY_KILLER_AUTODETECT_OOM_ADJ_VALUES=y
複製代碼
** ubuntu模塊化了的,但安卓initrd無法引導需要編譯在內核內的AHCI驅動:
- CONFIG_SATA_AHCI=y
- CONFIG_SATA_AHCI_PLATFORM=y
複製代碼
** 解決導致安卓出現黑屏的問題
- CONFIG_NO_GPU_AUTHENTICATION=y
複製代碼
** 解決導致安卓出問題的驅動:
- # CONFIG_USB_KBD is not set
- # CONFIG_USB_MOUSE is not set
複製代碼
//滑鼠是只能上下活動,而且是左右變成了上下
** 解決導致Ubuntu普通用戶訪問網路出問題的選項配置(主要安卓特有的網路許可權設置導致的):
- # CONFIG_ANDROID_PARANOID_NETWORK is not set
複製代碼
同時在commoncap.c中注釋掉(此4.9.31的內核不需要,這是自己打補丁的4.10內核碰到的問題):
- /* if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))
- return 0;
- if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))
- return 0;
- */
複製代碼
** 解決編譯內核時體積過大的問題(這是Ubuntu自己的問題)
- # CONFIG_DEBUG_INFO is not set
複製代碼
將以上選項添加到Ubuntu內核conifg文件中,使用修改後的文件作為配置文件來編譯安卓x86的內核,可以實現一個內核通用與android x86 和ubuntu。
另外需要的功能,看看是否存在:
啟用devtmpfs:
- CONFIG_DEVTMPFS=y
複製代碼
附配置好的config文件: config-4.9.31.zip (46.25 KB, 下載次數: 20)
4、編譯內核
進入 內核源碼目錄
- cd android-x86-kernel
複製代碼
把配置好的config文件重命名為.config
- make oldconfig
複製代碼
然後編譯
- make
複製代碼
打包
- make targz-pkg
複製代碼
需要deb包的可以
- make deb-pkg
複製代碼
如果有缺少wl文件的錯誤可以用make -i編譯忽略該錯誤。
當然你也可以用安卓x86的工具鏈交叉編譯
例如:
- export ARCH=x86
- export SUBARCH=x86_64
- export PATH=~/prebuilts/x86_64-linux-android-4.9/bin:$PATH
- export CROSS_COMPILE=x86_64-linux-android-
- make
- make targz-pkg
複製代碼
5、安裝
安裝到linux里可以直接
- make install
複製代碼
對於安卓x86看你的安裝方式了。
原文鏈接:Android-x86和Linux的通用內核-Emind Desktop-一銘雲社區 - 一銘雲社區
推薦閱讀:
※Linux基本命令(mkdir、touch、remove、alias,copy)
※Linux自動備份大容量網站數據到七牛雲存儲:秋水逸冰backup.sh腳本+七牛qshell工具
※Linux Core Dump
※如何在絕大部分類型的機器上安裝NVIDIA顯卡驅動
※top命令的輸出太長一個屏幕顯示不完怎麼辦?
TAG:Androidx86 | Linux |