Tiny6410驱动开发心得(一)

来源:互联网 发布:学语文的软件 编辑:程序博客网 时间:2024/05/17 23:48

工具:

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 ?= armCROSS_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   
3、关掉Touchscreen触摸屏的相关驱动模块,应该在make zImage中总是出现相关变量未定义的问题。关掉也不影响驱动的开发。

4、解决VERMAGIC不一致的问题

首先:修改主Makefile文件的头四行为

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 38
EXTRAVERSION =-FriendlyARM

其次:修改目录下源码中的include/linux/vermagic.h中的VERMAGIC_STRING如下:

#define VERMAGIC_STRING                         \
    UTS_RELEASE " preempt mod_unload ARMv6 "                            
    /*MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT             \
    MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS    \
    MODULE_ARCH_VERMAGIC*/

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就没反应,只能重启开发板