问题是这样的,小弟载了一个2.6.22的内核跟一个yaffs2的根文件系统,然后按照教程上写了一个内核模块,该内核模块所做的工作就是调用 register_chrdev() 去注册一个字符设备。。。大概就是这样子的,可是发现模块是加载进去了,因为用 lsmod命令可以查看到模块,但是用 cat /proc/devices 却看不到我注册的字符设备啊,用printk想打印分配到的主设备号也没办法,printk打印不出任何东西,网上查了一下发现printk存在优先级的问题,于是我用dmesg去查看控制台输出的东西,也没看到我printk里面的内容。。。这就郁闷了,现在就存在两大问题:内核无法注册字符设备;printk函数无法打印字符串 我的内核模块代码如下:麻烦前辈帮忙指点一下,这个问题已经纠结小弟多日了!硬件平台是LT2440开发板
复制代码- #include <linux/kernel.h>
- #include <linux/module.h>
- #include <linux/fs.h>
- #include <linux/init.h>
- #include <linux/platform_device.h>
- #include <linux/leds.h>
- //#include <asm/hardware.h>
- //#include <asm/arch/regs-gpio.h>
- //#include <asm/arch/leds-gpio.h>
- int nDrvID = 0;
- static int first_drv_open(struct inode *inode, struct file *file)
- {
- printk("first_drv open!\n");
- return 0;
- }
- static int first_drv_write(struct inode *inode, struct file *file)
- {
- printk("first_drv write!\n");
- return 0;
- }
- static struct file_operations first_drv_fops={
- .owner = THIS_MODULE,
- .open = first_drv_open,
- .write = first_drv_write,
-
- };
- int first_drv_init(void)
- {
- nDrvID = register_chrdev( 0, "first_drv", &first_drv_fops);
- printk("the first_drv_init is called!\n");
- printk("the \"register_chrdev\" run result is %d!\n", nDrvID);
- return 0;
- }
- void first_drv_exit(void)
- {
- unregister_chrdev(nDrvID, "first_drv");
- }
- module_init(first_drv_init);
- module_exit(first_drv_exit);
|