您的位置:首页 > 其它

Tiny6410驱动开发心得(一)

2017-11-08 15:57 344 查看
工具:

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


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、在开发板上运行i
4000
nsmod lxm_hello_module.ko安装模块

11、lsmod查看模块是否安装,rmmod lxm_hello_module可以卸载模块



内核移植可参考http://www.cnblogs.com/ape-ming/p/5170610.html,没有试验,感觉比较靠谱

驱动能顺利移植就是参考了它的,之前生成好的ko驱动在开发板一直提示内存错误,之后lsmod就没反应,只能重启开发板
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: