MyException - 我的异常网
当前位置:我的异常网» 驱动开发 » 请问几个嵌入式linux驱动的有关问题!多谢

请问几个嵌入式linux驱动的有关问题!多谢

www.myexceptions.net  网友分享于:2013-03-19  浏览:11次
请教几个嵌入式linux驱动的问题!谢谢!
写了个键盘驱动key_scan.c,
1.请问想编译成key_scan.o该在Makefile中怎么写编译语句?谢谢。
2.int   register_chrdev(unsigned   int   major,   const   char   *name,   struct   file_operations   *fops);函数的参数   name该用什么?是key_scan吗?它与mknod的第一个参数有什么关系?
3.想调试这个驱动,ARM9通过串口在超级终端上能看见printk输出的信息,该怎么做?是不是要使用GDB?如果是,又该怎么使用呢?在ARM9上能使用GDB吗?谢谢


------解决方案--------------------
首先你没有说你的编译环境是什么,是Linux到ARM的交叉编译么。
还有你的编译内核是2.4还是2.6也没说,差别还是挺大的。

2.4中编译成.o文件,2.6中编译成.ko文件。

第1个问题,与交叉编译链相关,你没说。

第2个问题,与内核版本相关,不过看这个申明:
int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);
name应该就是要向 /proc/device里写入的设备名称,也就是你之后mknod的参数。

第3个问题,通过串口连接的超级终端能直接看到printk的信息。
------解决方案--------------------
关于交叉编译的Makefile,我给你一个 ppc-linux-gcc 的,你改相应的编译链应该就可以了
CROSS_COMPILE=/home/guys/starwave-ppc/staging_dir_powerpc/bin/powerpc-linux-uclibc-

CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
RM = rm

KMOD = mypcf8563
INC = myi2c

LINUX = /home/guys/starwave-ppc/build_powerpc/linux

SYS_INC = /home/guys/starwave-ppc/staging_dir_powerpc/bin/../lib/gcc/powerpc-linux-uclibc/3.4.6/include

CINCS = -I . -I include -I inc -I $(LINUX)/include -I $(LINUX)/arch/ppc \
-I $(LINUX)/arch/ppc/include

CFLAG = -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
-fno-strict-aliasing -fno-common -ffreestanding -O2 \
-fomit-frame-pointer -Iarch/ppc -msoft-float -pipe -ffixed-r2 \
-mmultiple -mstring -Wa,-maltivec -Wdeclaration-after-statement

DFLAGS = -DMODULE -DKBUILD_BASENAME=$(KMOD) -DKBUILD_MODNAME=$(KMOD)

CFLAGS = -m32 -Wp,-MD,.$(KMOD).o.d \
-nostdinc -isystem $(SYS_INC) \
-D__KERNEL__ $(CINCS) $(CFLAG)

SRCS = $(KMOD).mod.o $(KMOD).o $(INC).o

OBJS = $(SRCS)

all: $(KMOD)
@echo "Look for $ <.ko please "

%.o: %.c
$(CC) $(CFLAGS) $(DFLAGS) -c -o $@ $ <

$(KMOD): $(SRCS)
$(LD) -m elf32ppc -r -o $@.ko $(KMOD).mod.o $(KMOD).o $(INC).o

clean:
$(RM) -f $(OBJS) *.o *.ko

------解决方案--------------------
关于第2个问题
register_chrdev()是2.4内核注册设备的老方法,而你用的是2.6内核,建议用
int register_chrdev_region(dev_t first, unsigned int count, char *name);
void cdev_init(struct cdev *cdev, struct file_operations *fops);

这种2.6推荐的方法注册设备。

mknod 一个已经被占用了设备号的设备肯定是要出错的,通常不会直接去mknod,而是通过脚本之类的东西读取/proc/devices里面记录的设备号,然后建立设备节点.如:

major=$(awk "\\$2==\ "$module\ " {print \\$1} " /proc/devices)
mknod /dev/${device} c $major 0


关于第3个问题

驱动调试的软件方法通常有:
1. 用打印调试(printk)
2. 使用 /proc 文件系统调试
3. 用strace 命令观察调试
4. 使用kgdb 调试

你的情况是交叉编译,感觉用kgdb调试的可能性不大,主要还是printk(),更深就要用硬件调试了,用示波器看它的波形了
------解决方案--------------------
qq群:29468069
linux技术驱动讨论专用群,欢迎前往讨论学习.
------解决方案--------------------
mark
------解决方案--------------------
int register_chrdev_region(dev_t first, unsigned int count, char *name);

first 是你要分配的起始设备编号. count 是你请求的连续设备编号的总数. name 是应当连接到这个编号范围的设备的名子; 它会出现在 /proc/devices 和 sysfs 中.

void cdev_init(struct cdev *cdev, struct file_operations *fops);

cdev 结构嵌入一个你自己的设备特定的结构,fops就是你驱动的文件操作索引。

文章评论

程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
漫画:程序员的工作
漫画:程序员的工作
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
我是如何打败拖延症的
我是如何打败拖延症的
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
一个程序员的时间管理
一个程序员的时间管理
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
那些争议最大的编程观点
那些争议最大的编程观点
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员应该关注的一些事儿
程序员应该关注的一些事儿
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
程序员都该阅读的书
程序员都该阅读的书
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
旅行,写作,编程
旅行,写作,编程
程序员和编码员之间的区别
程序员和编码员之间的区别
总结2014中国互联网十大段子
总结2014中国互联网十大段子
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
我的丈夫是个程序员
我的丈夫是个程序员
程序员必看的十大电影
程序员必看的十大电影
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
每天工作4小时的程序员
每天工作4小时的程序员
Java程序员必看电影
Java程序员必看电影
中美印日四国程序员比较
中美印日四国程序员比较
如何成为一名黑客
如何成为一名黑客
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
鲜为人知的编程真相
鲜为人知的编程真相
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
编程语言是女人
编程语言是女人
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员的鄙视链
程序员的鄙视链
10个调试和排错的小建议
10个调试和排错的小建议
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有