Android和 Linux 是两码事,Android系统是基于 Linux 内核的。我们编译的 Android源码是 Android 系统本身的源码,而内核是指通过原生 Linux 源码移植过来的内核源码,所以它们需要我们分别编译。并且 Android 系统的版本号和 Linux 源码的版本号是没有严格意义上的对应关系的,只要某个版本的 Linux 内核能支撑起某个版本的 Android 系统,那么它们就可以组合使用。内核就不多说了,它在 Android 中的作漏歼用跟在其它 Linux 发行版中的作用没什么区别,我们简单介绍一下 Android 文件系统的结构。Linux 系统的启动过程:bootloader(GRUB)---->zImage(Kernel)---->ramdisk(临时根,在内存中)---->rootfs(永久根,在磁盘上)Android 的启动过程:bootloader(厂商提供)---->zImage(Kernel)---->ramdisk(永烂贺久根,为了提速所以放在内存中)那么 Android 的 ramdisk 中存放了什么呢,通常分为四个分区:[fat32] 内置存储空间。fat32 不是名字,是分区格式。[system] 系统启动时挂载到system目录[data] 系统启动时挂载到data目录[cache] 相当于swap分区其中 system 分区和 data 分区是 Android 系统中非常重要的两个分区,我们简单介绍一下它们常用的作用。system: [app] xxx.apk | 系统自带的软件安装目录,普通用户无权卸载。像电话本、拨号器、短信等等系统应用都安装在这里。还有许多定制版手返历冲机被无良厂商预装了各种无法被卸载的垃圾程序都放在这里。这里的程序都是用 Java 编写的。 [framework] xxx.jar | 存放用 Java 编写的库 [bin] xxx | 存放本地程序,一般都是由 C/C++/asm 编写 [lib] xxx.so | 存放用 C/C++/asm 编写的库data: 这个目录在内存中,是android系统的家目录。系统配置文件都在这个分区中,恢复出厂设置通常就是格式化该分区。好了,android 的文件系统就先简单介绍到这了,下面开始今天的正题吧,编译 Linux 内核源码。我手上用的是 Linux 3.5 的内核,并且已经被大神们移植过了,所以我就不再执行 make menuconfig 了,而是直接用大神给做好的配置文件进行编译了。自己还没有研究过怎么移植内核,上次折腾到半夜还失败了,所以这次先老老实实的拿大神移植好的内核做实验,等过段时间研究好了内核移植再拿出来分享。既然有了大神移植好的内核,那么编译起来也就简单多了,过程当中也没有遇到什么坑。[yuhuashi@local android]$ tar xzf linux-3.5-20140422.tgz[yuhuashi@local android]$ cd linux-3.5/[yuhuashi@local linux-3.5]$ cp tiny4412_linux_defconfig .config[yuhuashi@local linux-3.5]$ make -j4......此处省略一万字OBJCOPY arch/arm/boot/zImageKernel: arch/arm/boot/zImage is readyOK,看到上面这两句话我们就知道编译成功了,并且编译好的内核放在了 arch/arm/boot/zImage 这里。可以开始烧写系统到开发板了,鸡冻ing...====================华丽的分割线====================接下来我们将编译好的数据拷贝到SD卡上,然后就可以通过SD卡烧写系统了。首先将友善之臂(Tiny4412 开发板的制造商)提供的 Superboot(就是个 bootloader) 烧写到 SD 卡上,使我们的 SD 卡可以引导起来。1.插入 SD 卡2.查看 SD 卡对应的设备文件[yuhuashi@local tools]$ sudo fdisk -lDisk /dev/sdc: 7948 MB, 7948206080 bytes19 heads, 10 sectors/track, 81704 cylinders, total 15523840 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x00000000Device Boot Start End Blocks Id System/dev/sdc1 155217 15523839 7684311+ b W95 FAT32可见我的 SD 卡是 /dev/sdc,各位在后面看到我的命令中包含 /dev/sdc 或 /dev/sdc1 时,需要替换成你机器上查询出来对应的设备文件路径,千万不要写错了!====前方高能预警,请无关人员立即撤离,相关人员必须在意识清醒的情况下谨慎操作!!!====3.将 Superboot 烧写到 SD 卡上其实可以自己用 read(2)、write(2) 函数等方式烧写,我已经有一个现成的工具了,所以直接就拿来用了。各位如果没有烧写工具可以自己写一个,因为我没有该工具的源码所以就不贴源码了,注意别把分区表覆盖了就行。另外 bootloader 是烧写在设备上的(即/dev/sdc),而不是烧写在分区上的(/dev/sdc1)。[yuhuashi@local tools]$ ./write4412boot Usage:<./write4412boot>
标签:tiny4412,开发板,linux