设为首页 加入收藏

TOP

加载TQ2440驱动-Hello World 模块
2014-11-24 12:35:36 来源: 作者: 【 】 浏览:0
Tags:加载 TQ2440 驱动 -Hello World 模块

开发平台:


交叉编译器:天嵌公司提供的arm-linux-gcc 4.3.3,


内核树:/opt/EmbedSky/linux-2.6.30.4/


目标平台:


天嵌公司的TQ2440开发板ARM9,内核版本2.6.30.4


1. 首先解压天嵌公司提供的内核源码包linux-2.6.30.4_20100531.tar.bz2,


tar xvfj linux-2.6.30.4_20100531.tar.bz2 –C /


-C是指定解压目录,后面的/代表在根目录解压归档文件。


之后内核树会被解压到/opt/EmbedSky/linux-2.6.30.4/


编译内核:




在此,config_EmbdeSky_W35为天嵌公司提供的内核配置文件,开始时可暂时拿来用。


至此,内核树已经准备好了,这是编译内核驱动模块的前提工作,如果在自己的文件系统中没有准备好内核树,则无法构造可装载的模块。


2. 安装交叉编译器4.3.3


解压天嵌公司提供的EABI-4.3.3_EmbedSky_20100610.tar.bz2,




之后交叉编译器会被解压到/opt/EmbedSky/4.3.3/,


修改环境变量配置文件/etc/environment,


PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/EmbedSky/4.3.3/bin"


LANGUAGE="zh_CN:zh:en_US:en"


LANG="zh_CN.utf8"



使用命令




保存重启即生效,若不想重启可使用




但是此命令只对该终端生效,所以若没其他问题,推荐重启


3.编写hello world 驱动模块




驱动模块不一定要放在内核树里,只要你的Makefile指定了内核树的路径就没问题,所以我这里在/home/shanks/里建立了一个modules目录专门用来开发驱动模块


hello.c 源码:




Makefile:




然后,




生成了几个文件,其中hello.ko就是我们需要的用来加载的模块文件。


这里注意,make之前必须要先准备好内核树,否则make会出错。


连上开发板,这里我把PC的根目录挂载到板子的/mnt下,




好了,加载模块!


Hello, world


Goodbye, cruel world


insmod时可能出现的错误:


I.


hello: version magic '2.6.30.4 mod_unload ARMv4 ' should be'2.6.30.4-EmbedSky mod_unload ARMv4 '


insmod: cannot insert 'hello.ko': invalid module format


出错原因:模块版本与内核版本不匹配!


解决办法:导入预设配置信息,进入menuconfig 继续配置General config ->( )Local version -> 括号中加入如下内容:“-EmbedSky”退出保存为 .config ,重新编译内核、驱动模块,再来加载模块


ii.


hello: Unknown symbol__aeabi_unwind_cpp_pr0
insmod: cannot insert 'hello.ko': unknown symbol in module, or unknown
parameter


出错原因:模块和内核镜像不匹配


刚开始学驱动,终于成功加载了hello world 模块!


这是学习驱动的一小步,但是对我来说却是一大步!


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android 从Internet获取html,图片 下一篇Qt 简易电子相册

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·工业机器人TCP校准中 (2025-12-25 05:19:17)
·opc 通讯协议与 TCP (2025-12-25 05:19:15)
·labview中tcp/ip通信 (2025-12-25 05:19:13)
·新书介绍《Python数 (2025-12-25 04:49:47)
·怎么利用 Python 进 (2025-12-25 04:49:45)