linux课程设计指导文档 联系客服

发布时间 : 星期一 文章linux课程设计指导文档更新完毕开始阅读b08d5cda7f1922791688e89f

my_major=result;

printk(\

printk(\ printk(\ printk(\ printk(\ } return 0; }

static void __exit my_exit(void){

unregister_chrdev(my_major,\ printk(\}

my_init 用于注册设备,获得设备的主设备号

调用register_chrdev(0,“sky_driver(设备名)”,&my_fops); my_exit 用于注销设备

调用unregister_chrdev(my_major, “sky_driver(设备名)”); 然后在程序尾再调用这两个函数 Module_init(my_init); Module_exit(my_exit) MODULE_LICENSE(“GPL”); 2. 编译

(1) 将设备驱动源文件复制到/usr/src/linux/drivers/misc/usr/src/linux指的是源代码路径)

(2) 修改Makefile,只要一句即可:obj-m +=sky_driver.o

下(这里的

23

(3) 编译

在/usr/src/linux/drivers/misc路径下执行 Make -C /usr/src/linux SUBDIRS=$PWD modules 如果编译成功将得到.ko文件

注意:此步编译过程中必须没有错误或者任何的警告,否则必须对错误和警告信息提示的位置进行修改,然后重新编译,直到没有任何错误或者警告(warning)为止。

3. 挂载内核中模块

命令:insmod ./sky_driver.ko

此时 cat /proc/devices或dmesg会看到在字符设备中有254 sky_driver。前面的是系统分配的主设备号,后面是设备注册名。

在my_init函数中注册新的字符设备,所用系统调用是 Register_chrdev(0,”sky_driver”,&my_fops);

函数中第一个参数是告诉系统,新注册的设备的主设备号由系统分配, 第二个参数是新设备注册时的设备名字, 第三个参数是指向file_operations的指针,

执行该命令后调用dmesg|tail 会看到在my_init中写到的提示信息。

insmod 时出现 \的可能原因:

如果你modprobe自己编译的内核模块时出现:Invalid module format,那很有可能是以下原因引起的:

所用内核源码版本号与目前使用的内核不同; 编译目标不同,比如编译的是i686,装好的是i386; 使用编译器版本不同;

目前使用的内核不是自己编译出来的。

参考文献:http://blog.csdn.net/hecant/archive/2007/10/31/1859606.aspx

24

4. 创建新的虚拟设备文件

命令:mknod /dev/sky_driver C 254 0

在此命令中,第一个参数是新建设备文件的地址和名字,第二个参数是指创建的是字符设备文件,第三个参数是主设备号,第四个参数是从设备号。

执行成功会在/dev中看到一个新的设备文件sky_driver. 5. 测试新的设备驱动 编写测试程序 6. 卸载操作 删除模块

命令:rmmod sky_driver 删除新增的字符设备文件 命令:rm /dev/sky_driver

本部分参考文献:

http://blog.csdn.net/sabalol/archive/2008/02/01/2076610.aspx http://www.knowsky.com/340884.html

25

第4章 问题4以及相关知识

4.1. 实现原理

用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。

我们要显示系统信息,只需进行相应的文件操作。首先打开相应的文件,读取所需要的信息,将其写入一个缓冲区中,然后将缓冲区的内容加到Gtk的相应的控件上面去,最后将控件组合显示即可。

4.2. 实现方法

由于要以图形界面来实现,要用到Linux的图形库Qt或者是Gtk,本例中使用QT.

(1)

CPU信息:

使用cat /proc/cpuinfo你可以查看系统的内存信息

由上图可知所需的信息所在文件中的位置,然后将其写入缓冲区,加载到QT

26