当前位置:首页 » 编程软件 » 怎样编译android内核

怎样编译android内核

发布时间: 2024-07-06 08:59:28

① 在编译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的结果

热点内容
唐山壹编程 发布:2024-10-05 08:48:07 浏览:811
广东gps时钟服务器云主机 发布:2024-10-05 08:27:31 浏览:754
超级访问沙溢 发布:2024-10-05 08:26:13 浏览:226
php删除数组空 发布:2024-10-05 08:15:21 浏览:465
100平小型超市如何配置 发布:2024-10-05 08:10:56 浏览:91
sql语句删除多表 发布:2024-10-05 08:10:55 浏览:818
nosql数据库对比 发布:2024-10-05 08:05:46 浏览:943
androidlollipop 发布:2024-10-05 07:40:38 浏览:699
买es200哪个配置性价比 发布:2024-10-05 07:33:03 浏览:554
linux分区方案 发布:2024-10-05 07:21:51 浏览:854