1.错误描述:
root@light-laptop:/home/light/work/drivers/hello# make
make -C /opt/zeng-linux/linux-2.6.32.2 M=/home/light/work/drivers/hello modules
make[1]: 
正在进入目录 `/opt/zeng-linux/linux-2.6.32.2'
  CC [M]  /home/light/work/drivers/hello/hello.o
In file included from include/linux/gfp.h:4,
                 from include/linux/kmod.h:22,
                 from include/linux/module.h:13,
                 from /home/light/work/drivers/hello/hello.c:13:
include/linux/mmzone.h:18:26: error: linux/bounds.h: No such file or directory
include/linux/mmzone.h:258:5: warning: "MAX_NR_ZONES" is not defined
include/linux/mmzone.h:260:7: warning: "MAX_NR_ZONES" is not defined
include/linux/mmzone.h:262:7: warning: "MAX_NR_ZONES" is not defined
In file included from include/linux/gfp.h:4,
                 from include/linux/kmod.h:22,
                 from include/linux/module.h:13,
                 from /home/light/work/drivers/hello/hello.c:13:
include/linux/mmzone.h:300: error: 'MAX_NR_ZONES' undeclared here (not in a function)
make[2]: *** [/home/light/work/drivers/hello/hello.o] 错误 1
make[1]: *** [_module_/home/light/work/drivers/hello] 错误 2
make[1]:正在离开目录 `/opt/zeng-linux/linux-2.6.32.2'
make: *** [modules] 错误 2

错误原因:/opt/zeng-linux/linux-2.6.32.2' 这个目录是linux源码的目录,但是没有经过编译,

错误解决:编译这个内核/opt/zeng-linux/linux-2.6.32.2' 这个目录下会生成 vmlinxu文件。

2.PC机和目标板内核版本不一致

问题提示:version magic '2.6.32.2 mod_unload modversions ARMv4 ' should be '2.6.32.2-FriendlyARM mod_unload ARMv4 '

准确来说,PC机上的内核所指的是用于编译模块的内核的版本,并不一定就是运行在PC上linux系统上的内核版本。用指令 uname -r 所查询到的版本号,就是后者。之前按照mini2440用户手册的流程,配置好PC机上用于实验的内核,但由于一段时间以来的捣鼓,早已“面目全非”,先将其还原。

(1)在内核linux-2.6.xxxxxx # 目录上,执行make distclean     //清除,即还原

(2)在同一目录上执行 cp config_mini2440_t35 .config          //使用现成配置

(3)执行 make menuconfig   之后退出即可                          //内核保存配置信息之用

(4)执行 make zImage                                                  //编译内核(I是i大写不是l)

(5)执行 make modules                                                 //编译模块

一般来说经过上述几步即可与板子上的内核同一版本,前提当然是正在使用的内核版本与板载的内核版本相符。

3.Makefile文件的编写方法

转自:http://lexandros.blog.163.com/blog/static/18556658820129261393375/

有两种方法可以编译自己写的驱动程序。
第一种方法:直接加入内核
1. 将驱动程序放入内核相应的驱动文件夹,例如名字为my_led.c
2. 修改此驱动目录下的Kconfig文件,加入对该驱动文件的配置选项:
config MY_LED
bool "S3C2410 LED Driver"    
depens on ARCH_S3C2410
help 
LED driver for the samsung s3c2410
说明:my_LED是配置选项标题
bool表示该选项要么是y要么是n,不可编译成模块。如需要编译成模块则改为tristate(三态)
3. 修改此驱动目录下的Makefile文件,加入对驱动源码的编译:
obj-$(CONFIG_MY_LED) += my_led.o
第二种方法:单独编译驱动模块(1)
1. 下载内核源代码,选择和你的驱动相同的平台的配置文件进行编译,
假设路径为/root/linux-2.6.29。或者利用/usr/src下面的源码,这样就只能编译主机平台上的驱动。
2. 将驱动文件放在一目录下,例如/root/dirver/my_led.c
3. 在/root/driver下编写Makefile文件,内容为:
obj-m := my_led.o
如果这个模块包含多个.c文件,则如下编写Makefile :
obj-m := module_name.o
module-objs := file1.o file2.o ...
4. 在本目录下执行:
make -C /root/linux-2.6.29 M=$(pwd) modules
第三种方法:单独编译驱动模块(2)
直接编写Makefile文件:
obj-m :=led.o
CURRENT_PATH := $(shell pwd)
ARM_LINUX_KERNEL :=/root/linux-2.6.29
all:
$(MAKE) -C $(ARM_LINUX_KERNEL) M=$(CURRENT_PATH) modules 
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions Module.symvers .Makefile.swp modules.order
运行make即可

补充:用mini2440手册模块编译也行。

在编写mini2440 helloworld驱动遇到的问题相关推荐

  1. (一)mini2440网卡驱动dm9000之dm9000_probe分析

    2012-04-07 02:05:48|  分类: 跟着国嵌学arm|举报|字号 订阅 /*首先我们必须知道probe函数什么时候调用.其实在平台设备驱动注册的时候,内核会在平台设备总线上去遍历所有的 ...

  2. Linux驱动开发-编写(EEPROM)AT24C02驱动

    1. 前言 AT24C02是IIC接口的EEPROM存储芯片,这颗芯片非常经典,百度搜索可以找到非常多的资料,大多都是51.STM32单片机的示例代码,大多采用模拟时序.裸机系统运行.当前文章介绍在L ...

  3. mini2440 led驱动

    mini2440 led驱动 2009-09-27 18:36:12|  分类: C++学习 |  标签: |字号大中小 订阅 整理一下思路,刚刚看的mini2440 led驱动. mini2440的 ...

  4. openharmony移植之编写电阻触摸屏驱动

    之前有写过一篇关于Gt911触摸的文章,今天写一篇关于如何在openharmony上调试电阻屏触摸驱动, 首先需要修改如下两个文件,将我们的驱动文件加入驱动编译框架中, diff --git a/dr ...

  5. 编写Linux网络设备驱动(上)

    编写Linux网络设备驱动(上) <编写Linux网络设备驱动(上)> 来自:刘建文 | 学术半·IT歌·文 作者:刘建文 关键字:Linux 驱动程序 永久链接地址:http://art ...

  6. Linux运行911,韦东山-Linux下编写GT911触摸驱动 - 百问网嵌入式问答社区

    源码在最下面 问题一:资源获取Gt911数据手册 在韦老师给的资料里,路径为\06_Datasheet\Extend_modules\7寸LCD模块\电容触控芯片GT911 Datasheet_121 ...

  7. mini2440 SPI驱动移植 (基于SPI子系统) (转的记录)

    原文地址:mini2440 SPI驱动移植 (基于SPI子系统) 作者:三点水兽 参考一: 按照下面帖子的方法,本人试验成功,只需按照下面步骤进行就行了. 原帖地址: http://blog.csdn ...

  8. mini2440串口驱动

    Linux主机:ubuntu16.04   开发板:mini2440  Linux内核:2.6.33.2 在Linux系统里面对mini2440的串口驱动已经编写好了,但是在测试的时候发现串口一和串口 ...

  9. windows 编写的硬件驱动_哪个是PXI硬件合适的设备驱动程序?VISA还是IVI?

    理想的测试系统可以认为是其组成部分的总和,包括测量和激励硬件,信号切换,电缆以及可能 的大规模互连系统,UUT电源,外部PC或嵌入式控制器,操作系统(OS)和编程环境.每个部件根据诸如UUT测试参数, ...

最新文章

  1. 青春就是一无所有,梦想就是坚持走下去
  2. iOS开发(2)UILabel学习
  3. 音视频技术开发周刊 | 135
  4. leetcode 84. Largest Rectangle in Histogram | 84. 柱状图中最大的矩形(单调栈)
  5. Spring MVC:Ajax和JQuery
  6. linq to json for sl
  7. 教你做前端表单文本框必填
  8. 根据div 标签 查看数组@class=modulwrap 下面的/table/tbody/tr/td
  9. python画图哆啦a梦大作业_Python—turtle画图(哆啦A梦)
  10. 微软6月补丁日修复7个0day:6个已遭利用且其中1个是为 APT 服务的商用exploit
  11. 摄像头NV21格式转RGB的JAVA代码,测试正确
  12. 家庭洗车APP --- Androidclient开展 之 网络框架包介绍(一)
  13. 彩虹仿优云宝模板,最新彩虹代shua网仿优云宝发卡网模板
  14. 二叉树前中后序遍历的口诀
  15. 单元格下拉全选快捷键_复制全选快捷键是什么
  16. [h5棋牌项目]-05-重载配置导致的内存泄露
  17. 张凯龙 西北工业大学计算机学院,张凯龙的个人主页-西北工业大学教师个人主页...
  18. Redis的Spring配置
  19. 力天创见客流工程实施
  20. CSS3 使用 calc() 计算高度 vh px

热门文章

  1. dll中使用dialogbox_玩游戏丢失dll文件别着急 认识这些就妥了
  2. 自定义列_如何对Pandas DataFrame进行自定义排序
  3. Django之数据表增删改查
  4. flask-uploads扩展的使用笔记
  5. spark sql建表的异常
  6. HTML5开发 Web SQL Database 本地数据库
  7. 009 - CSS预处理器less sass SAML SSO 单点登录 websocket socket.io
  8. 计算机网络---计算机网络分层结构
  9. 鱼腥草可以随便吃吗?
  10. 茅台少女踩曲玄机何在?