工具:
1.光盘A中linux-2.6.38-20150708.tgz
2.交叉编译器arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz
3.tiny6410开发板(自带的系统)
步骤:
一、解压内核
tar xzvf linux-2.6.39.tar.gz
二、修改Makefile
ARCH ?= $(SUBARCH) CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
改成:
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
三、进入解压出来的linux-2.6.39目录,拷贝arch/arm/configs/s3c6400_defconfig到当前目录并重命名为.config
cp arch/arm/configs/s3c6400_defconfig ./.config
四、基本配置
执行make menuconfig
1、设置System Type
首先:设置System Type->ARM System type为Samsung S3C64XX
其次:选择System MMU类型为MINI6410
System Type ---> *** System MMU *** │ │ -*- S3C64XX DMA │ │ [ ] SMDK6400 │ │ [ ] A&W6410 │ │ [*] MINI6410 │ │ [ ] REAL6410 │ │ [ ] SMDK6410 │ │ [ ] NCP │ │ [ ] Airgoo HMT │ │ [ ] SmartQ 5 │ │ [ ] SmartQ 7
只选上MINI6410其它的不选。
2、支持进程中通信
General setup --->
│ │ [*] System V IPC
4、解决VERMAGIC不一致的问题
首先:修改主Makefile文件的头四行为
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 38
EXTRAVERSION =-FriendlyARM
其次:修改目录下源码中的include/linux/vermagic.h中的VERMAGIC_STRING如下:
#define VERMAGIC_STRING \5、解决make zImage 时no machine record defined 错误
将arch/arm/kernel/vmlinux.lds的最后两行(如下)给注释起来
ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support")
ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined")
网上有说这样做没有从根本上解决问题,但确实能通过编译,出来的ko驱动也能在开发板上运行,就Ok了
6、首先:在drivers/char目录中放置自己的驱动源程序lxm_hello_module.c。
其次:修改drivers/char目录中Kconfig,在其中添加如下内容:其中“depends on CPU_S3C6410”依赖于前述System MMU的选择,只有选择了mmu,在make menuconfig中 LXM_HELLO_MODULE才能可选。编译前勾选此项
config LXM_HELLO_MODULE
tristate "lxm hello module sample"
depends on CPU_S3C6410
help
lxm hello module sample.
然后:修改drivers/char目录中Makefile,在最后添加 obj-$(CONFIG_LXM_HELLO_MODULE) += lxm_hello_module.o
7、make zImage
8、make modules
9、将drivers/char目录中生成的lxm_hello_module.ko文件复制到开发板上
10、在开发板上运行insmod lxm_hello_module.ko安装模块
11、lsmod查看模块是否安装,rmmod lxm_hello_module可以卸载模块
内核移植可参考http://www.cnblogs.com/ape-ming/p/5170610.html,没有试验,感觉比较靠谱
驱动能顺利移植就是参考了它的,之前生成好的ko驱动在开发板一直提示内存错误,之后lsmod就没反应,只能重启开发板