主题 : 2.6.22的内核无法注册字符设备,也无法printk,前辈请进! 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 89004
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
综合积分: 14 分
注册时间: 2013-03-20
最后登录: 2017-09-13
楼主  发表于: 2013-05-29 18:06

 2.6.22的内核无法注册字符设备,也无法printk,前辈请进!

问题是这样的,小弟载了一个2.6.22的内核跟一个yaffs2的根文件系统,然后按照教程上写了一个内核模块,该内核模块所做的工作就是调用 register_chrdev()  去注册一个字符设备。。。大概就是这样子的,可是发现模块是加载进去了,因为用 lsmod命令可以查看到模块,但是用 cat /proc/devices 却看不到我注册的字符设备啊,用printk想打印分配到的主设备号也没办法,printk打印不出任何东西,网上查了一下发现printk存在优先级的问题,于是我用dmesg去查看控制台输出的东西,也没看到我printk里面的内容。。。这就郁闷了,现在就存在两大问题:内核无法注册字符设备;printk函数无法打印字符串     我的内核模块代码如下:麻烦前辈帮忙指点一下,这个问题已经纠结小弟多日了!硬件平台是LT2440开发板

复制代码
  1. #include <linux/kernel.h>
  2. #include <linux/module.h>
  3. #include <linux/fs.h>
  4. #include <linux/init.h>
  5. #include <linux/platform_device.h>
  6. #include <linux/leds.h>
  7. //#include <asm/hardware.h>
  8. //#include <asm/arch/regs-gpio.h>
  9. //#include <asm/arch/leds-gpio.h>
  10. int nDrvID = 0;
  11. static int first_drv_open(struct inode *inode, struct file *file)
  12. {
  13.     printk("first_drv open!\n");
  14.     return 0;
  15. }
  16. static int first_drv_write(struct inode *inode, struct file *file)
  17. {
  18.     printk("first_drv write!\n");
  19.     return 0;
  20. }
  21. static struct file_operations first_drv_fops={
  22.     .owner = THIS_MODULE,
  23.     .open = first_drv_open,
  24.     .write = first_drv_write,
  25.     
  26. };
  27. int first_drv_init(void)
  28. {
  29.     nDrvID = register_chrdev( 0, "first_drv", &first_drv_fops);
  30.     printk("the first_drv_init is called!\n");
  31.     printk("the \"register_chrdev\" run result is %d!\n", nDrvID);
  32.     return 0;
  33. }
  34. void first_drv_exit(void)
  35. {
  36.     unregister_chrdev(nDrvID, "first_drv");
  37. }
  38. module_init(first_drv_init);
  39. module_exit(first_drv_exit);