標籤:

Android-x86和Linux的通用內核

Android-x86和Linux的通用內核

4 人贊了文章

附件更新:之前忘了CONFIG_NO_GPU_AUTHENTICATION=y,導致啟動安卓黑屏

摘要:可以使用同一個內核(及對應內核模塊)分別啟動Android-x86系列的系統和標準Linux系統的內核配置。當然也可以同時啟動兩個系統(還不成熟)。

正文:

1、內核選用的是Android-x86項目的內核,目前內核版本為4.9.31。

Android-x86項目的內核與Linux主線內核差距不大。可以通過提取補丁對比來看,基本上就是添加了安卓所需要的一些驅動,修復了主線內核在某些顯卡上啟動surfacefinger黑屏等等問題。

2、獲取內核源碼:

  1. git clone -b kernel-4.9 git.code.sf.net/p/andro android-x86-kernel

複製代碼

3、配置內核

為了保證能啟動標準Linux桌面系統,以Ubuntu為例,採用Ubuntu系統內核的config配置文件為基礎,添加配置安卓x86所必須驅動。

**安卓必須驅動:

  1. CONFIG_ANDROID=y

  2. CONFIG_ANDROID_BINDER_IPC=y

  3. CONFIG_ANDROID_BINDER_DEVICES="binder"

  4. # CONFIG_ANDROID_BINDER_IPC_32BIT is not set

  5. CONFIG_ASHMEM=y

  6. CONFIG_ANDROID_LOW_MEMORY_KILLER=y

  7. CONFIG_ANDROID_LOW_MEMORY_KILLER_AUTODETECT_OOM_ADJ_VALUES=y

複製代碼

** ubuntu模塊化了的,但安卓initrd無法引導需要編譯在內核內的AHCI驅動:

  1. CONFIG_SATA_AHCI=y

  2. CONFIG_SATA_AHCI_PLATFORM=y

複製代碼

** 解決導致安卓出現黑屏的問題

  1. CONFIG_NO_GPU_AUTHENTICATION=y

複製代碼

** 解決導致安卓出問題的驅動:

  1. # CONFIG_USB_KBD is not set

  2. # CONFIG_USB_MOUSE is not set

複製代碼

//滑鼠是只能上下活動,而且是左右變成了上下

** 解決導致Ubuntu普通用戶訪問網路出問題的選項配置(主要安卓特有的網路許可權設置導致的):

  1. # CONFIG_ANDROID_PARANOID_NETWORK is not set

複製代碼

同時在commoncap.c中注釋掉(此4.9.31的內核不需要,這是自己打補丁的4.10內核碰到的問題):

  1. /* if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))

  2. return 0;

  3. if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))

  4. return 0;

  5. */

複製代碼

** 解決編譯內核時體積過大的問題(這是Ubuntu自己的問題)

  1. # CONFIG_DEBUG_INFO is not set

複製代碼

將以上選項添加到Ubuntu內核conifg文件中,使用修改後的文件作為配置文件來編譯安卓x86的內核,可以實現一個內核通用與android x86 和ubuntu。

另外需要的功能,看看是否存在:

啟用devtmpfs:

  1. CONFIG_DEVTMPFS=y

複製代碼

附配置好的config文件: config-4.9.31.zip (46.25 KB, 下載次數: 20)

4、編譯內核

進入 內核源碼目錄

  1. cd android-x86-kernel

複製代碼

把配置好的config文件重命名為.config

  1. make oldconfig

複製代碼

然後編譯

  1. make

複製代碼

打包

  1. make targz-pkg

複製代碼

需要deb包的可以

  1. make deb-pkg

複製代碼

如果有缺少wl文件的錯誤可以用make -i編譯忽略該錯誤。

當然你也可以用安卓x86的工具鏈交叉編譯

例如:

  1. export ARCH=x86

  2. export SUBARCH=x86_64

  3. export PATH=~/prebuilts/x86_64-linux-android-4.9/bin:$PATH

  4. export CROSS_COMPILE=x86_64-linux-android-

  5. make

  6. make targz-pkg

複製代碼

5、安裝

安裝到linux里可以直接

  1. 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 |