这里介绍些关于Tiny6410开发板内核的编译,为后期驱动开发做前期的准备。
开发环境:64位的Ubuntu 14.01虚拟机
目标机:友善之臂Tiny6410开发板
内核:linux-2.6.38-20110325.tar.gz
内核源码下载地址 https://www.kernel.org/pub/linux/kernel/v2.6/ ;
Tiny6410内核下载地址 http://pan.baidu.com/s/1qX2ZBNu
内核结构:
arch
内核所支持的每种CPU体系,在该目录下都有对应的子目录,每种CPU的子目录又进一步分解为boot、mm、kernel等子目录,分别包含控制系统,内存管理,系统调用。
mach开头的目录都代表着一种开发板,其他目录为arm系列所共有的。
|--x86 英特尔CPU及与之兼容体系结构的子目录
||--boot 引导程序
|||--compressed 内核解压缩
||--tools 生成压缩内核映像的程序
||--kernel 相关内核特性实现方式,如信号处理、时钟处理
||--lib 硬件相关工具函数
block
部分块设备驱动程序
crypto
加密、压缩、CRC校验算法
Documentation
内核的文档
drivers
设备驱动程序
fs
存放各种文件系统的实现代码。每个子目录都对应一种文件系统的实现,公用的源程序用于实现虚拟文件系统VFS
||--devpts /dev/pts虚拟文件系统
||--ext2 第二扩展文件系统
||--fat MS的fat32文件系统
||--isofs ISO9660光盘cd-rom上的文件系统
include
内核所需要的头文件。与平台无关的头文件在include/linux子目录下,与平台相关的头文件则放在相应的子目录下。
lib
库文件代码
mm
用于实现内存管理中与体系结构无关的部分,与体系结构相关的代码在arch目录下
net
网络协议的实现代码
||--802 802无线通信协议核心支持代码
||--appletalk 与苹果系统连网的协议
||--ax25 AX25无线internet协议
||--bridge 桥接设备
||--ipv4 IP协议族V4版32位寻址模式
||--ipv6 IP协议族V6版
Samples
一些内核编程的范例
Scripts
配置内核的脚本
Security
SElinux的模块
Sound
音频设备的驱动程序
Usr
CPIO命令实现
Virt
内核虚拟机
我使用的开发板如下:
第一步:搭建交叉编译环境
我使用的是4.5.1的交叉编译器,下载地址如下
arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz
链接:http://pan.baidu.com/s/1hrd2uX2 密码:x7wi
下载完之后使用root用户将压缩包解压到/opt目录下,如下:
解压完之后,修改/etc/environment,在末尾添加交叉编译器的路径,如下:
然后就可以验证交叉编译器是否安装成功了,执行如下命令:
看到这样的结果,说明gcc安装成功了,由于我是64的操作系统,所以在这之前需要安装如下插件:
$sudo apt-get install lsb-core
这样才能正常使用交叉编译器
第二步:编译内核
编译Tiny的内核会稍微简单一点,我也忘记我这个内核是从哪里的了,可能是厂家给的,也可能是网上下的,反正就这么放在硬盘里。
解压linux-2.6.38-20110325.tar.gz,如下:
我的板子屏幕尺寸是640x480,所以我应该使用config_mini6410_vga640x480 配置文件。
执行1:$cp config_mini6410_vga640x480 .config
执行2:$make menuconfig
执行3:$make V=s
执行完成后,就可以看到文件arch/arm/boot/zImage了。
这里要说明下,网上很多教程都说要修改Makefile,还有要从arch/arm/路径下拷贝生产.config文件,如下。
其实这都是针对编译纯净版内核而言,那么内核就不能使用厂家提供的内核了,因为厂家提供的内核里面集成了很多厂家自己根据板子外围设备编写的驱动程序,这对于学习驱动还是有帮助的,可以先学着如何改驱动。
第三步:烧录新编译的内核
这个如何烧录的话,看厂家提供的刷机指南,就好了,这里不多说了!