(1)下载干净的内核代码树,比如下载该版本的纯净内核树:linux-2.6.22.6.tar.bz2
(2)修改代码树,生成可以在板子上运行的代码树: linux-2.6.22.6_board,比如,板子可以运行,必须生成kernel文件(比如:uImage文件)
1. 查看目录文件
book@book-desktop:/work/system$ ls
busybox-1.7.0.tar.bz2 s3c_mci_patch.tar.bz2 yaffs_source_util_larger_small_page_nand.tar.bz2
u-boot-1.1.6_jz2440.patch yaffs_util_mkyaffsimage.patch
linux-2.6.22.6_jz2440.patch u-boot-1.1.6.tar.bz2
linux-2.6.22.6.tar.bz2 yaffs_source.tar.gz
2. 解压纯净的内核树
#tar xjvf linux-2.6.22.6.tar.bz2
3. 进入内核目录
#cd linux-2.6.22.6/
4. patch打补丁
#patch -p1 < ../linux-2.6.22.6_jz2440.patch
5. 配置,编译内核uImage
book@book-desktop:/work/system$ cd linux-2.6.22.6/
book@book-desktop:/work/system/linux-2.6.22.6$ cp config_ok .config
book@book-desktop:/work/system/linux-2.6.22.6$ make uImage
生成uImage就可以了。
6. 编写驱动程序: xxx_driver.c
7. 编写Makefile文件
KERN_DIR = /work/system/linux-2.6.22.6_board (这个就是前面生成的内核代码树,在目标板上可以直接运行)
all:
make -C $(KERN_DIR) M=`pwd` modules
clean:
make -C $(KERN_DIR) M=`pwd` modules clean
rm -rf modules.order
obj-m += xxx_driver.o
8. 编译驱动程序,生成xxx_driver.ko文件
9. 利用NFS服务将xxx.driver.ko文件加载进内核运行。
相关的测试命令:insmod xxx_driver.ko
rmmod xxx_driver
lsmod xxx_driver
cat /proc/devices
ls -l /dev/xxx_device
10. 写测试代码,对驱动进行相关的测试和验证。
可能遇到的问题:
编译器版本问题只能编译make zImage,低版本才能编译为uImage
补充:
【更新u-boot, 内核,以及根文件系统文件】