怎樣編譯android內核-ag真人国际官网
① 在編譯android內核的時候出現下面的錯誤,是怎麼回事
解決方案:找到工程中makefile文件,將其中 「-m64" 字元串刪除即可。
原因:gcc 3.4 或者更高版本,已經將其去除了,所以會出現上面的錯誤!
去android源代碼網站找樓主編譯android版本的對應gcc,安裝後重新編譯
② 做安卓軟體開發需要哪些工具
android是基於linux的,所以在ubuntu下是最好的。當然windows下面也是可以的。但是android的內核是基於linux的,並且通過終端進行各種操作,非常強大,也比cmd方便。
大致開發的環境是這樣:ubuntu系統,以前是windows然後安裝了ubuntu的虛擬機。android大部分的開發都是中間層到頂層的應用開發,所以基本上是java開發。
表配如下:1eclipse是開發java必備,也是android必備。(當然前提是先安裝jdk1.6)
2下載android的sdk和adt。這是android的開發必須的工具,adb、ddms、mksdcard、aapt,debug 必備
a安裝完eclipse後,通過help=〉install new software把adt安裝好
b然後window=>preference設置好sdk的路徑即可
③ android源碼怎麼編譯生成recovery.img
recovery.img生成過程
l630-l637 依賴關系
(from: build/core/makefile)630 $(installed_recoveryimage_target): $(mkbootfs) $(mkbootimg) $(minigzip) /631 $(installed_ramdisk_target) /632 $(installed_bootimage_target) /633 $(recovery_binary) /634 $(recovery_initrc) $(recovery_kernel) /635 $(installed_2ndbootloader_target) /636 $(recovery_build_prop) $(recovery_resource_deps) /637 $(recovery_install_ota_keys)
installed_recoveryimage_target 為我們的編譯目標:
584 installed_recoveryimage_target := $(product_out)/recovery.img
它依賴很多其它目標:
1.mkbootfs, minigzip, mkbootimg,pc端工具軟體:(from build/core/config.mk)265 mkbootfs := $(host_out_executables)/mkbootfs$(host_executable_suffix)266 minigzip := $(host_out_executables)/minigzip$(host_executable_suffix)267 mkbootimg := $(host_out_executables)/mkbootimg$(host_executable_suffix)
2.installed_ramdisk_target,標准根文件系統 ramdisk.img:
326 built_ramdisk_target := $(product_out)/ramdisk.img328 # we just build this directly to the install location.329 installed_ramdisk_target := $(built_ramdisk_target) 3.installed_bootimage_target, 即boot.img,標准內核及標准根文件系統:362 installed_bootimage_target := $(product_out)/boot.img
4. recovery_binary, recovery可執行程序,源碼位於:bootable/recovery
590 recovery_binary := $(call intermediates-dir-for,executables,recovery)/recovery
5. recovery_initrc,recovery模式的init.rc, 位於 bootable/recovery/etc/init.rc
586 recovery_initrc := $(call include-path-for, recovery)/etc/init.rc
6. recovery_kernel, recovery 模式的kernel, 同標准內核
587 recovery_kernel := $(installed_kernel_target) # same as a non-recovery system
7.installed_2ndbootloader_target,我們不用。
8. recovery_build_prop, recovery 模式的build.prop, 同標准模式。589 recovery_build_prop := $(installed_build_prop_target)
9. recovery_resource_deps, recovery 模式使用的res, 位於:recovery/custom/{proct_name}/res, 以及設備自定義部分(我們沒用到)
591 recovery_resources_common := $(call include-path-for, recovery)/custom/$(target_product)/res592 recovery_resources_private := $(strip $(wildcard $(target_device_dir)/recovery/res))593 recovery_resource_deps := $(shell find $(recovery_resources_common) 594 $(recovery_resources_private) -type f) 10. recovery_install_ota_keys, ota 密鑰:
618 # generate a file containing the keys that will be read by the619 # recovery binary.620 recovery_install_ota_keys := /621 $(call intermediates-dir-for,packaging,ota_keys)/keysl638-l655 准備內容
638 @echo ----- making recovery image ------639 rm -rf $(target_recovery_out)640 mkdir -p $(target_recovery_out)641 mkdir -p $(target_recovery_root_out)642 mkdir -p $(target_recovery_root_out)/etc643 mkdir -p $(target_recovery_root_out)/tmp
准備recovery目錄:out/target/proct/{proct_name}/recovery 及其子目錄:
./root
./root/etc
./root/tmp644 echo copying baseline ramdisk...645 cp -r $(target_root_out) $(target_recovery_out)646 echo modifying ramdisk contents...647 rm -rf $(target_recovery_root_out)/res
從標准根文件系統拷貝所有文件, 刪除其res 目錄。
648 cp -f $(recovery_initrc) $(target_recovery_root_out)/649 cp -f $(recovery_binary) $(target_recovery_root_out)/sbin/ 拷貝recovery 模式的核心文件 init.rc 及 recovery 650 cp -rf $(recovery_resources_common) $(target_recovery_root_out)/651 $(foreach item,$(recovery_resources_private), /652 cp -rf $(item) $(target_recovery_root_out)/)653 cp $(recovery_install_ota_keys) $(target_recovery_root_out)/res/keys 拷貝資源文件及密鑰文件。 654 cat $(installed_default_prop_target) $(recovery_build_prop) /655 > $(target_recovery_root_out)/default.prop 生成屬性文件 default.prop, 它包含了標准根文件系統的default.prop (out/target/proct/{proct_name}/root/default.prop)以及system分區的build.prop (out/target/proct/{proct_name}/system/build.prop) l656-l661 最終生成recovery.img
656 $(mkbootfs) $(target_recovery_root_out) | $(minigzip) > $(recovery_ramdisk) 壓縮recovery根文件系統 657 build/quacomm/mkimage $(product_out)/ramdisk-recovery.img recovery > $(product_out)/ramdisk_recovery.img 加一個標識頭(recovery) 658 mv $(product_out)/ramdisk_recovery.img $(product_out)/ramdisk-recovery.img659 $(mkbootimg) $(internal_recoveryimage_args) --output $@660 @echo ----- made recovery image -------- $@661 $(hide) $(call assert-max-image-size,$@,$(board_recoveryimage_partition_size),raw)
和內核一起,生成recovery.img附:recovery 根文件系統目錄結構
$ tree
.
├── advanced_meta_init.rc
├── data
├── default.prop
├── dev
├── etc
├── init
├── init.factory.rc
├── init.goldfish.rc
├── init.quacomm.rc
├── init.rc
├── meta_init.rc
├── proc
├── res
│ ├── images
│ │ ├── icon_error.png
│ │ ├── icon_installing.png
│ │ ├── indeterminate1.png
│ │ ├── indeterminate2.png
│ │ ├── indeterminate3.png
│ │ ├── indeterminate4.png
│ │ ├── indeterminate5.png
│ │ ├── indeterminate6.png
│ │ ├── progress_empty.png
│ │ └── progress_fill.png
│ └── keys
├── sbin
│ ├── adbd
│ ├── advanced_meta_init
│ ├── meta_init
│ ├── meta_tst
│ └── recovery
├── sys
├── system
└── tmp
④ android內核用什麼語言寫的
android是基於linux內核,所以android核心部分是c語如瞎型言編寫的。但是android提供的sdk是基於java語言的,也就是說大部分用戶所使用神液的應用程序是用java編寫的。渣猜
⑤ android內核編譯時如何獲得.config文件
得到config之後,直接復制到你下載來的內核文件夾kernel下,更名為.config,打開終端,進入此目錄(假設你放在里你的home下,即~/kernel)運行make arch=arm menuconfig(arch=arm表示編譯的是arm平台的)
⑥ 怎麼修改android 的linux內核
android 產品中,內核格式是linux標準的zimage,根文件系統採用ramdisk格式。這兩者在android下是直接合並在一起取名為boot.img,會放在一個獨立分區當中。這個分區格式是android自行制定的格式。
android開發時,最標準的做法是重新編譯於內核和根文件系統,然後調用android給的命令行文件mkbootimg(out/host/linux-x86/bin/)來打包。
在製作手機rom時,有時會單獨編譯內核或抽出根文件進行修改內容,比如我只編譯內核,其餘的地方不變。這樣重新安裝巨大的android開發環境實在不劃算。因此很多boot.img解包工具被人開發出來,這一些工具都是把內核和根文件系統從一個現成的boot.img抽取出來,修發後再次打包還原。
一.常見的解包工具
因為boot.img的格式比較簡單,它主要分為三大塊(有的可能有四塊)
因此很多人開發分析工具,有是linux shell腳本,比如repack-zimage,也有人採用perl,還有c語言編寫的 unbootimg,
我使用的是在源碼位置system/core/mkbootimg/ 下的 mkbootimg。為了簡化,藍點工坊把與mkbootimg中打包工具和解包工具以及所包含的libmincrpty庫抽出來,並且重寫一個makefile,作為開源項目。
使用者只需要在linux(需安裝gcc,make,一般是標配)或windows(需要安裝mingw)的命令行執行make,即可產生可執行文件mkbootimg ,unpackbootimg。
二.解/打包工具使用
解包工具:unpackbootimg
常見格式
unpackbootimg -i .\tmp\boot.img -o .\out
這一句命令行表示把boot.img解包,所有文件輸出到out目錄下
它會解壓出如下文件:
boot.img-zimage (內核文件)
boot.img-ramdisk.gz (根文件系統打包文件)
boot.img-cmdline (mkbootimg cmdline參數)
boot.img-pagesize (mkbootimg pagesize參數)
boot.img-base (mkbootimg base參數)
打包工具:mkbootimg (android自帶)
常見的命令格式:
./mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel zimage --ramdisk boot/boot.img-ramdisk.gz -o boot.img --base 02e00000
這句含義是把內核文件zimage和boot目錄下的根文件壓縮包 boot.img-ramdisk.gz打包成boot.img.
其中cmdline和base的值均來源於unpackbootimg的結果