版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux驱动开发常用相关命令和技巧,一个简单的驱动实例 升级内核的一般步骤 Linux最常用的命令 内核编程技巧 资料书籍和工具,一个最简单的Helloworld驱动例子,#include #include #include MODULE_LICENSE(GPL); static int _init hello_init(void) printk( Hello world!n); return 0; static int _exit hello_exit(void) printk( Bye, cruel worldn); return 0; module_init(hello_init);
2、module_exit(hello_exit);,一个最简单的Helloworld驱动例子,上述是是一个简单Helloworld驱动程序的例子。其中hello_init为驱动加载时执行的函数,即驱动程序的入口;hello_exit为驱动卸载时执行的函数,即驱动程序的出口。在Linux驱动程序中使用printk打印信息,可以看出程序在加载和卸载驱动的时候分别打印两句话。其中printk里面的为日志消息等级,详见帮助。,Makefile文件,obj-m := Helloworld.o KERNELDIR := /lib/modules/$(shell uname -r)/build PWD :=
3、$(shell pwd) modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules modules_install: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install clean: rm -rf *.o * core .depend .*.cmd *.ko *.mod.c .tmp_versions $(TARGET),Makefile文件,上述代码是针对于前面简单驱动程序的Makefile文件。Makefile是一个定义程序编译规则的文件。其中第一行表示生成的目标代码,对应于Helloword.c,第二
4、行为头文件路径,后面为生成模块和安装模块的规则,clean为执行make clean时清理代码生成的临时文件。可以看出在Makefile文件中可以嵌入某些shell命令。关于Makefile文件知识可以查阅相关资料。,升级内核的一般步骤,1、make menuconfig 2、make 3、make modules_install 4、mkinitramfs -o /boot/initrd-linux3.2.11.img 3.2.11 5、make install 6、update-grub,升级内核的一般步骤,在执行上述步骤的之前需安装一些工具,执行:apt-get install init
5、ramfs-tools, module-init-tools(所有操作都是root用户权限下执行) 通过升级Linux内核可以对Linux内核模块的编译有一定的了解,并且通过配置Linux对于Linux某些内核参数也会有所了解。上述升级步骤相对简化,不同发行版本的Linux内核升级所需下载的工具或者步骤可能略有不同,详细参考相关资料。,Linux最常用的命令,在linux操作尤其是驱动开发中常用的命令介绍如下: 1.ls命令(实例如下:) 功能:用于列出目录下所有的文件 说明:常用参数:-l 列出文件名称和详细信息。 ls -help 或者 man ls 可以查看更多帮助信息。(类似的方法可以
6、查看相关命令的帮助信息,下面的不再重复),lsls-virtual-machine:$ ls examples.desktop 公共 模板 视频 图片 文档 下载 音乐 桌面,Linux最常用的命令,2. cd命令 (实例如下:) 功能:用于进入目标目录 说明:cd .用于进入当前目录的上一级目录;cd /用于进入根目录;cd 用于进入用户目录(即/home),lsls-virtual-machine:$ cd /usr/src lsls-virtual-machine:/usr/src$,Linux最常用的命令,3.cat命令(实例如下:) 功能:主要用于在终端中显示文本信息 。 说明: c
7、at命令是Linux驱动编程中很常用的一个命令,常用于打印驱动调试信息或者系统虚拟文件系统/proc中的信息,例如:(类似功能也可以用more命令代替) cat /proc/kallsyms用于查看系统内核符号 cat /proc/timer_list 用于查看系统时钟设备以及定时器,rootls-virtual-machine:/usr/src# cat /proc/interrupts CPU0 CPU1 0: 142 0 IO-APIC-edge timer 1: 3384 5 IO-APIC-edge i8042,Linux最常用的命令,4.lsmod 命令(实例如下:) 功能:主要用
8、于显示当前Linux系统中已加载的模块。 说明:驱动编程过程中可以查看驱动是否加载成功。,rootls-virtual-machine:/# lsmod Module Size Used by timer 90877 0 rfcomm 37292 0,Linux最常用的命令,5.uname 命令(实例如下:) 功能:输出一组系统信息。 说明:如果不跟随选项,则视为只附加-s 选项,通常加选项-a输出系统版本信息。,rootls-virtual-machine:/# uname -a Linux ls-virtual-machine 3.2.7 #1 SMP Thu Apr 12 12:29:3
9、9 CST 2012 i686 i686 i386 GNU/Linux,Linux最常用的命令,6.grep 命令(实例如下:) 功能:在给出文件列表或标准输入后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本。 说明:很多时候grep命令用于配合其他打印命令输出内容中特定的部分。(如上例),rootls-virtual-machine:/# cat /proc/interrupts | grep LOC LOC: 4172425 112446641 Local timer interrupts,Linux最常用的命令,7. dmesg命令 (实例如下
10、:) 功能:打印内核日志信息 说明:在驱动编程中经常用到的命令,用于查看驱动程序中“printk”打印语句打印的信息,其中最左边一列是时间信息。, 1422.376851 return of current-cpus_allowed is 2: 1422.376853 return of current_thread_info()-cpu is 1: 1422.376858 return apic_read(APIC_ID) is : 1000000,Linux最常用的命令,8. Insmod命令 (实例如下:) 功能:用于加载内核模块 说明:加载驱动程序编译生成的.ko文件,如果在驱动程序中
11、申明了可以结束输入参数,在执行该命令的时候还可以加输入参数。(类似于在普通C程序中的main函数接受命令行参数),rootls-virtual-machine:/home/ls/works/timer# insmod timer.ko,Linux最常用的命令,9. rmmod命令 (实例如下:) 功能:用于卸载内核模块 说明:卸载已加载的内核模块,卸载时调用驱动程序中的驱动出口函数,rootls-virtual-machine:/home/ls/works/timer# rmsmod timer.ko,Linux最常用的命令,10. sudo命令(实例如下:) 功能:是linux系统管理指令,
12、是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具 说明:通常配合其他命令一起使用,在Linux终端中可以通过 sudo s H 或者 su root切换到root用户下,其中后者需要设置root用户密码,设置方法为 sudo password。注:驱动的加载和卸载都需要在root用户权限下操作,lsls-virtual-machine:/usr/src$ su root,Linux最常用的命令,11. chmod命令(实例如下:) 功能:这个命令用于修改目标文件或者目录的读写控制权限,格式为:chmod XXX 文件或目录 说明:其中“XXX”是标识文件权限的掩码,通常777
13、为最高权限表示完全控制。(具体可以看帮助信息),rootls-virtual-machine:/home/ls/works/timer# chmod 777 test.sh,Linux最常用的命令,12. top命令(实例如下:) 功能:这个命令相当于Windows下面的任务管理器,打印系统任务相关信息 说明:有很多参数选择,具体可以查看帮助信息。使用top命令以后,按s键可以设置信息的刷新时间,单位为秒;按F键可以选择相关选项,例如选择J,显示各个任务所运行的CPU;按1键可以查看多核处理器下各个处理器各自的使用率等信息。 (ps命令也可以查看任务信息,详细查看相关资料),rootls-vi
14、rtual-machine:/home/ls/works/timer# top,Linux最常用的命令,13. watch 命令(实例如下:) 功能:这个命令在Linux内核编程中也比较常用,用于监控某些命令的打印信息 说明:这个命令通常配合其他打印命令,如上例,默认 watch 会以 2s 的间隔重复运行命令,你也可以用 -n 参数指定时间间隔 。,lsls-virtual-machine:/usr/src$ watch cat /proc/interrupts,Linux最常用的命令,上面简单介绍了一些Linux驱动开发中常用的命令,大多数Linux的发行版本还提供了其他非常多使用的命令,
15、很多命令也提供了很多参数选项,在终端中可以通过加help或者man 命令来查看帮助选项。其他一些常见的命令如: make 根据Makefile文件定义编译规则编译程序 pwd 用于查看当前工作路径 kill 用于杀死某个进程 sleep用来将目前动作延迟一段时间 此外,在命令中还可以使用一些循环分支结构,可以将命令写成批处理执行的shell程序,可以查看shell编程相关资料,内核编程技巧,Linux内核编程相对与window环境下的编程,其调试和编译相对都比较麻烦一点。可以根据自己的个人喜好和习惯选择自己的编辑工具和调试方法。最简单的调试即在驱动程序中使用打印语句,将信息打印出来,通过dme
16、sg命令查看打印信息。 还可以使用dgdb、kdb、kprobes等内核调试用具调试内核模块。,内核编程技巧,在Linux系统中proc文件系统是一个虚拟文件系统,是Linux内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为常规文件映射到一个目录树中,这样我们就可以简单直接的通过echo或cat这样的文件操作命令对系统信息进行查取,在Linux内核编程中,可以从proc文件系统中查看到诸如中断信息、集成信息、处理器信息、内核符号信息等许多重要且实用的信息。,内核编程技巧,Linux内核编程中,内核源码是最好的代码参考资源,涉及到内核功能的函数很多都可以在源码中找到相同和相似的实现,
17、通过参照内和源码中函数的实现而实现自己的功能。并且对于Linux提供的内核API其参数和功能往往比较难查阅到相关说明的资料,可以在内核源码中查看其具体实现,而了解其参数和功能。对于很多内核提供的符号,但未导出为内和API的函数也可以通过查找其在内核中的地址,而参照其源码实现调用。,资料书籍和工具,环境配置: 一般情况下可以使用windows系统vmware虚拟机中安装某一个Linux发行版本的系统来搭建Linux内核编程环境。选用哪一个Linux发行版本都可以,只是在操作上可能有所差别,只要内核版本符合需求即可。也可以安装windows+Linux双系统,涉及到计算机底层硬件的功能时vmwar
18、e可能并不能完全地模拟出其功能(例如时钟设备的定时精度),所以,使用双系统能够更好地适应一些特殊的内核程序。在双系统的Linux系统中,可以mentohust工具来使用锐捷帐号连接网络,可以使用wine等工具来模拟windows环境使用某些应用程序。,资料书籍和工具,在学习Linux内核编程的过程中最重要的资料是一份比较新的Linux内核源码,可以从/下载到最新的Linux内核源码。 阅读内核源码的工具,比较常用的是source insight,这是一款非常方便的内核源码阅读工具。还可以使用在线源码参考LXR,网址为:http:/lxr.linux.no/ 当然还有一些其他的源码阅读工具,例如使用Vim编辑器和一些插件配置的源码阅读工具等。,资料书籍和工具,关于Linux内核网上的中文资料的相对较少,最常用的是使用google搜索相关资料。最主要的有以下中文Linux资料网站: ChinaUnix技术社区,ChinaU是中国最大的Linu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《认识克》数学课件教案
- 2026江苏泰州市兴化市部分高中学校校园招聘教师18人参考笔试题库附答案解析
- 2025江苏连云港市消防救援支队第四批政府专职消防员招聘40人备考考试题库及答案解析
- 2025年日照五莲县教体系统公开招聘博士研究生备考考试试题及答案解析
- 2025四川内江市东兴区住房保障和房地产服务中心考核招聘编外人员1人备考考试试题及答案解析
- 2025河北廊坊大厂回族自治县殡仪馆招聘2人备考笔试题库及答案解析
- 2025湖北神农架林区实验小学附属幼儿园食堂员工及保育员招聘2人备考笔试题库及答案解析
- 2025中国农业科学院中原研究中心招聘2人备考笔试试题及答案解析
- 2025甘肃天水市秦州区眼科医院招聘超声影像工作人员1人参考笔试题库附答案解析
- 2025福建龙岩市上杭县庐丰卫生院招聘一体化乡村医生1人参考考试试题及答案解析
- 特种设备检验检测行业商业计划书
- 改革开放简史智慧树知到课后章节答案2023年下北方工业大学
- 木薯变性淀粉生产应用课件
- 地下水污染与防治课件
- 校门安全管理“十条”
- 超全QC管理流程图
- 临时工劳动合同简易版可打印
- 洁净室施工及验收规范标准
- -井巷工程课程设计
- pks r5xx装机及配置手册
- GB/T 17215.322-2008交流电测量设备特殊要求第22部分:静止式有功电能表(0.2S级和0.5S级)
评论
0/150
提交评论