刚刚开始学习Android系统,并不是很想从framwork层开始,过于庞大,很容易迷失。所以在网上下载了很多的电子书进行参考,先从学习HAL层以及驱动编程开始。
这里简单的记录一下步骤:
1,下载linux内核,Android系统内核用的就是linux内核。在清华镜像站可以下载到。
2,下载交叉编译器,这个不太好找,去国外翻墙现在更加不现实。在CSDN上能够找到,但是需要花点积分。
gcc-arm-none-eabi
arm-linux-gcc-4.4.3
3,内核编译配置,到内核的源码根目录中,/arch/arm/config/s3c6400_defconfig将这个文件拷贝到内核源码根目录,然后重命名为.config文件,这么做是为了避免配置内核编译的时候过多的参数配置,这个配置文件里已经集成大部分的arm架构下的默认配置。由于我即将入手的开发板是arm11架构的,这里推荐OK6410 飞凌的开发板。为了避免麻烦,就按照参考书上的来。这里还有一点需要注意,需要配置环境变量
export PATH=/gcc-arm-none-eabi-5_4-2016q3/bin:$PATH
4,make menuconfig 在根目录下运行这个配置,(这里需要注意的一点,需要额外下载一个linux的库,运行apt-get install libncurses5-dev)在配置编译配置的时候,需要用到。然后进入到配置界面,General setup->Cross-compiler.....,然后输入arm-none-linux-gnueabi-前缀。
5,最后,在源码根目录的Makefile中进行编辑,找到ARCH ?= ${SUBARCH}修改为 ARCH ?= arm
运行make 等待大概10分钟,也可能会更久。看机器配置了。
编译的过程中可能会遇见一个错误:
Can't use 'defined(@array)' (Maybe you should just omit the defined()?)
到报这个错误的文件中,将defined()去掉,只要留下
if(!@val)
drivers/scsi/osd/osd_initiator.c:67: error: size of array 'type name' is negative
注释掉报错的那行。
这里有一些常见的编译问题的处理方法:
链接
编译成功之后,就差一块开发板了,后面就可以入手开发板上的开发工作。
由于厌倦了Android应用层开发,以及遇到的工作瓶颈,所以才想在深入的学习Android系统,为了能够有更加深厚的Android基础,以及扩展自己的平台,这是必走的路。很多应用层开发到最后都转去做其他了,有的做前端,有的做后端。个人认为这些都是浅显的,花点时间填鸭一下就行。完全不具有挑战性。
个人觉得,人不应该惧怕走弯路,因为还年轻,当工作遇到困难,不应该因为有一块坚硬的石头挡在前面就回头走别人已经开好的路。应该自己另辟一条弯路,虽然可能会比别人走的慢,但是可以走的更加踏实。