Linux内核编译、驱动开发命令及步骤总结.docx

上传人:安*** 文档编号:17907856 上传时间:2022-05-27 格式:DOCX 页数:23 大小:21.45KB
返回 下载 相关 举报
Linux内核编译、驱动开发命令及步骤总结.docx_第1页
第1页 / 共23页
Linux内核编译、驱动开发命令及步骤总结.docx_第2页
第2页 / 共23页
点击查看更多>>
资源描述

《Linux内核编译、驱动开发命令及步骤总结.docx》由会员分享,可在线阅读,更多相关《Linux内核编译、驱动开发命令及步骤总结.docx(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Linux内核编译、驱动开发命令及步骤总结-常用命令-内核源码本身也无32位和64位之分,只要编译以后才有区别-yumlistinstalled列出所有已安装的软件包yumlistupdates列出所有可更新的软件包yuminstallsoftName安装软件包yumremovesoftName删除软件包服务#chkconfig-list#列出所有系统服务#chkconfig-list|grepon#列出所有启动的系统服务程序#rpm-qa#查看所有安装的软件包进程#ps-ef#查看所有进程#top#实时显示进程状态系统#uname-a#查看内核/操作系统/CPU信息#head-n1/etc/

2、issue#查看操作系统版本#cat/proc/cpuinfo#查看CPU信息#hostname#查看计算机名#lspci-tv#列出所有PCI设备#lsusb-tv#列出所有USB设备#lsmod#列出加载的内核模块#env#查看环境变量资源#free-m#查看内存使用量和交换区使用量#df-h#查看各分区使用情况#du-sh#查看指定目录的大小#grepMemTotal/proc/meminfo#查看内存总量#grepMemFree/proc/meminfo#查看空闲内存量#uptime#查看系统运行时间、用户数、负载#cat/proc/loadavg#查看系统负载磁盘和分区#mount|

3、column-t#查看挂接的分区状态#fdisk-l#查看所有分区#swapon-s#查看所有交换分区#hdparm-i/dev/hda#查看磁盘参数(仅适用于IDE设备)#dmesg|grepIDE#查看启动时IDE设备检测状况网络#ifconfig#查看所有网络接口的属性#iptables-L#查看防火墙设置#route-n#查看路由表#netstat-lntp#查看所有监听端口#netstat-antp#查看所有已经建立的连接#netstat-s#查看网络统计信息用户#w#查看活动用户#id#查看指定用户信息#last#查看用户登录日志#cut-d:-f1/etc/passwd#查看系统

4、所有用户#cut-d:-f1/etc/group#查看系统所有组#crontab-l#查看当前用户的计划任务-Fedora16内核版本为3.1.0-7.fc16.i686到3.4.2(2021.07.12)-Fedora18的内核版本:3.6.10-4-Fedora17采用3.3.4内核,集成4.7.0版gcc、gcc-c+、gcc-gfortran、gcc-objc以及gcc-gnat,OpenJDK7取代了OpenJDK6,成为了Fedora默认Java开发套件,集成KDE4.8桌面环境,性能和稳定性上有显著提升,其中包含KDEPlasma工作空间,集成了GNOME3.4桌面环境。-Fed

5、ora19采?用?3.9.0内?核1.uname-a/-r/查看内核版本2.安装VMwareTools后需要重启,复制粘帖功能才正常。3.Makefile文件的两行make开始的行,make前头必须是一个Tab空格,不能是Space键的其它空格,也不能没有空格。4.添加sudo权限rootlocalhost#chmod777/etc/sudoersrootlocalhost#gedit/etc/sudoersrootlocalhost#chmod440/etc/sudoers5.CentOS中文设置rootlocalhost#gedit/etc/sysconfig/i18n#LANG=en_U

6、S.UTF-8LANG=zh_CN.UTF-8/改成中文6.*.glade是GTK+图形界面产生器的XML格式设计文件,可用于C、C+、Java、C#、Python、Perl等。7.VMware调整客户机尺寸atuosize-autofitguest番外篇安装内核头文件编译一个设备驱动模块时,你需要在系统中安装内核头文件。内核头文件同样在你编译与内核直接链接的用户空间程序时需要。当你在这些情况下安装内核头文件时,你必须确保内核头文件准确地与你当前内核版本匹配比方:3.13.0-24-generic。#rpm-qa|grepkernel-headers-$(uname-r)第一篇内核编译安装1.

7、下载要编译的源码包,sudocpsrc-name.tar.xz/usr/src/复制到/usr/srcsudoxz-dsrc-name.tar.xz/解压xz包sudotar-xvfsrc-name.tar/解压tar包,得到源码文件夹另外,似乎可以用#tar-Jxvfsrc-name.tar.xz-C/usr/src一步解压bzip2-dlinux-2.6.32.26.tar.bz2/解压bz2包2.安装编译工具1)sudoyumgroupinstallDevelopmentTools或者sudoyuminstallgccgcc-c+kernel-devel2)-安装ncurses它是一个能

8、提供功能键定义(快速键),屏幕绘制及基于文本终端的图形互动功能的动态库。这就不难解释为何执行makemenuconfig命令需要ncurses了。sudoyuminstallgccmakencursesncurses-develperlsudoyumupdate3.清理旧配置文件法1:sudomakemrproper/删除源码目录残留.o和其他附属文件,确保源代码目录下没有不正确的.o文件以及文件的相互依靠法2:sudomakedistclean4.配置注意:编译的时候用的.config文件最好用你原来内核的config文件,这个文件在/boot/目录下有个config-内核版本号。将这个文件

9、copy到你要安装的内核的根目录下名字改成.config,再编译。可能会提示你一些新的配置,不懂的yes或者编译成模块选M就行了,宁多勿缺啊!*注意:标准内核源码对CPU默认配置是Pentium-Pro,为高性能奔腾处理器。有可能存在兼容问题,建议将CPU类型改为X586。步骤:在Menuconfig菜单下,进入Generalsetup-Processortypeandfeatures回车进入Processorfamily,选择586/K5/5x86/6x86/6x86MX项法1:sudomakemenuconfig-此命令运行将弹出kernelconfiguration界面,按ESC,点YE

10、S退出即可法2:sudomakeoldconfig/假如只想在原来内核配置的基础上修改一些小地方,会省去不少费事Y-将该功能编译进内核N-不M-将该功能编译成可在需要时动态载入内核的模块5.编译内核注意:2.6内核作了优化,不必显式执行makedep、makebzImage,只需make命令,系统会自动完成makedep、makebzImage所做工作sudomake-j4/4个线程编译,6.编译和安装模块sudomakemodules_install7.安装内核在源码目录下执行makeinstall,此命令为我们全权代理了安装新内核的所有工作,执行完后,就可直接重启,在启动菜单中就有新内核供

11、选择。其完成的工作有3项,见后。sudomakeinstall注意:本人makeinstall时出现下面几个错误,应该是虚拟机VMwareTools模块,直接无视,重新启动系统,出现启动选择菜单,选择新编译的内核菜单,顺利启动并能正常使用。ERROR:modinfo:couldnotfindmodulenf_defrag_ipv6ERROR:modinfo:couldnotfindmodulevmblockERROR:modinfo:couldnotfindmodulevsockERROR:modinfo:couldnotfindmoduleipv6ERROR:modinfo:couldnot

12、findmodulevmhgfs要解决这些错误,只需在配置.config时,将以上模块全设成m,或者直接在.config中将以上项全改成m即可。makeinstall完成的3项工作:1是将编译生成的内核镜像bzImage从源码目录arch/i386/boot复制到/boot,并重命名为vmlinuz-2.6.32.68(根据详细内核版本而定);2是用命令mkinitrdinitrd-2.6.32.682.6.32.68,生成initrd-2.6.32.68.img文件,它用于临时引导硬件到实际内核vmlinuz能够接管并继续引导的状态,将其也复制到/boot目录。注意mkinitrd是RedH

13、at特有命令,其他Linux有类似命令;3是配置grub打开/boot/grub/grub.conf,参加下面代码titleMyLinux-2.6.32.68(这是启动菜单显示的名字)root(hd0,0)/boot放在hd0磁盘的第一个分区kernel/vmlinuz-2.6.32.68roroot=UUID=./详细看grub.conf然后重启,若一切正常即可看到新内核的启动项。8.修改启动菜单注意:本人在CentOS6.5上编译2.6.32.68上未修改启动菜单,安装内核后重启就能看到启动菜单中有新编译的内核。#vim/boot/grub/grub.conf二、驱动开发篇安装完cento

14、s后,编译了一下驱动测试程序Hello。编译经过出现如下错误:make:*/lib/modules/2.6.32-220.4.1.el6.i686/build:Nosuchfileordirectory.Stop.make:*allError2但是用ls查询了一下,该文件明明存在。上网搜集,原来需要安装下面kernel相关的编译软件:1:kernel-firmware2:kernel3:kernel-debug4:kernel-headers5:kernel-doc6:kernel-devel7:kernel-debug-deve安装完成之后,即能够make成功。三、驱动编译及Makefile

15、1.Makefileobj-m:=hello.o/obj-m指的是编译内核模块,obj-y“指的是内核编译;make-C$(KDIR)M=$(PWD)modules/-C指定内核源码所在途径,M=指定待编译module模块所在目录。写好了一个简单hello驱动后,编译模块是出现了问题:1)没有.config文件2)总是出现找不到文件的情况后来才发如今编译模块之前首先要配置并构造内核,准备内核树关于Makefile运行的详细经过,重点介绍为何Makefile被执行了两次;一个简单的hello内核模块的Makefile:#hell0_makefileifneq($(KERNELRELEASE),)

16、obj-m:=hello.oelseKERNELDIR:=/lib/modules/$(shelluname-r)/buildPWD:=$(shellpwd)default:$(MAKE)-C$(KERNELDIR)M=$(PWD)modulesclean:rm-rf*.o*.mod.c*.mod.o*.koendif*十分注意:*上面KERNELDIR:=/lib/modules/$(shelluname-r)/build是用当前系统内核版本进行编译,若要使编译的驱动适用于其他内核版本,则配置为KERNELDIR:=/usr/src/kernels/2.6.32.68,当然2.6.32.68

17、内核源码要存在于该目录。编译驱动时指定的内核应与其加载运行的内核版本一致。若将2.5.10.1内核编译的驱动在2.6.32.68内核下加载,会出错无法加载。当写完一个hello模块,只要使用以上的makefile,make一下就行。假设我们把hello模块的源代码放在/home/study/prog/mod/hello/下。当我们在这个目录运行make时,make是怎么执行的呢?LDD3第二章第四节“编译和装载中只是简单地讲到该Makefile被执行了两次,但是详细经过是怎样的呢?首先,由于make后面没有目的,所以make会在Makefile中的第一个不是以.开始的目的作为默认的目的执行,于

18、是default成为make的目的。make会执行$(MAKE)-C$(KERNELDIR)M=$(PWD)modulesshell是make内部的函数,假设当前内核版本是2.6.13-study,则$(shelluname-r)的结果是2.6.13-study,这里,实际运行的是make-C/lib/modules/2.6.13-study/buildM=/home/study/prog/mod/hello/modules其中,/lib/modules/2.6.13-study/build是一个指向内核源代码/usr/src/linux的符号链接。可见,make执行了两次:第一次执行时是读h

19、ello模块的源代码所在目录/home/study/prog/mod/hello/下的Makefile;第二次执行时是执行/usr/src/linux/下的Makefile时.但是还是有不少令人困惑的问题:1)这个KERNELRELEASE也很令人困惑,它是什么呢?在/home/study/prog/mod/hello/Makefile中是没有定义这个变量的,所以起作用的是elseendif这一段。不过,假如把hello模块移动到内核源代码中。例如放到/usr/src/linux/driver/中,KERNELRELEASE就有定义了。在/usr/src/linux/Makefile中有162

20、KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)$(LOCALVERSION)这时候,hello模块也不再是单独用make编译,而是在内核中用makemodules进行编译。用这种方式,该Makefile在单独编译和作为内核一部分编译时都能正常工作。2)这个obj-m:=hello.o什么时候会执行到呢?在执行:make-C/lib/modules/2.6.13-study/buildM=/home/study/prog/mod/hello/modules时,make去/usr/src/linux/Makefil

21、e中寻找目的modules:862.PHONY:modules863modules:$(vmlinux-dirs)$(if$(KBUILD_BUILTIN),vmlinux)864echoBuildingmodules,stage2.;865$(Q)$(MAKE)-rR-f$(srctree)/scripts/Makefile.modpost能够看出,分两个stage:1.编译出hello.o文件。2.生成hello.mod.ohello.ko在这经过中,会调用make-fscripts/Makefile.buildobj=/home/study/prog/mod/hello而在scripts

22、/Makefile.build会包含很多文件:011-include.config012013include$(if$(wildcard$(obj)/Kbuild),$(obj)/Kbuild,$(obj)/Makefile)其中就有/home/study/prog/mod/hello/Makefile这时KERNELRELEASE已经存在。所以执行的是:obj-m:=hello.o关于makemodules的更具体的经过能够在scripts/Makefile.modpost文件的注释中找到。假如想查看make的整个执行经过,能够运行make-n。3.加载驱动sudoinsmodhello.k

23、o查看打印信息1)#tail/var/log/messages2)#dmesg|tail-83)#demsg|tail/var/log/messages查看已加载模块信息rootlocalhostwork#lsmod|grephellohello67804.卸载驱动sudormmodhello注:1)insmod加载模块的代码段和数据段到内核,并且调用模块的初始化函数来启动所有东西.2)rmmod假如内核以为模块还在用(就是讲,一个程序仍然有一个打开文件对应模块输出的设备),或者内核被配置成不允许模块去除,模块去除会失败.3)lsmod生成一个内核中当前加载的模块的列表.lsmod通过读取/p

24、roc/modules虚拟文件工作.当前加载的模块的信息可以在位于/sys/module的sysfs虚拟文件系统找到.4)如从一个终端模拟器或者在窗口系统中运行insmod和rmmod,你不会在你的屏幕上看到任何东西.消息进入了其中一个系统日志文件中,例如/var/log/messages(实际文件名子随Linux发布而变化).清华大学源:#cd/etc/yum.repos.d#vifedora-tuna.repofedoraname=Fedora$releasever-$basearch-tunafailovermethod=prioritybaseurl=httpdocsj/doc/c92

25、54fc4e87101f69f319521./fedora/releases/$releasever/Everything/$basearch/os/#mirrorlist=httpshttpdocsj/doc/c9254fc4e87101f69f319521./metalink?repo=fedora-$releasever&arch=$basearchenabled=1metadata_expire=7dgpgcheck=1gpgkey=file/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch fedora-debuginfoname=Fedora

26、$releasever-$basearch-Debug-tunafailovermethod=prioritybaseurl=httpdocsj/doc/c9254fc4e87101f69f319521./fedora/releases/$releasever/Everything/$basearch/debug/#mirrorlist=httpshttpdocsj/doc/c9254fc4e87101f69f319521./metalink?repo=fedora-debug-$releasever&arch=$basearchenabled=0metadata_expire=7dgpgch

27、eck=1gpgkey=file/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch fedora-sourcename=Fedora$releasever-Source-tunafailovermethod=prioritybaseurl=httpdocsj/doc/c9254fc4e87101f69f319521./fedora/releases/$releasever/Everything/source/SRPMS/#mirrorlist=httpshttpdocsj/doc/c9254fc4e87101f69f319521./metalink?re

28、po=fedora-source-$releasever&arch=$basearchenabled=0metadata_expire=7dgpgcheck=1gpgkey=file/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch#vifedora-updates-tuna.repofedoraname=Fedora$releasever-$basearch-tunafailovermethod=prioritybaseurl=httpdocsj/doc/c9254fc4e87101f69f319521./fedora/releases/$releas

29、ever/Everything/$basearch/os/#mirrorlist=httpshttpdocsj/doc/c9254fc4e87101f69f319521./metalink?repo=fedora-$releasever&arch=$basearchenabled=1metadata_expire=7dgpgcheck=1gpgkey=file/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch fedora-debuginfoname=Fedora$releasever-$basearch-Debug-tunafailovermethod

30、=prioritybaseurl=httpdocsj/doc/c9254fc4e87101f69f319521./fedora/releases/$releasever/Everything/$basearch/debug/#mirrorlist=httpshttpdocsj/doc/c9254fc4e87101f69f319521./metalink?repo=fedora-debug-$releasever&arch=$basearchenabled=0metadata_expire=7dgpgcheck=1gpgkey=file/etc/pki/rpm-gpg/RPM-GPG-KEY-f

31、edora-$basearch fedora-sourcename=Fedora$releasever-Source-tunafailovermethod=prioritybaseurl=httpdocsj/doc/c9254fc4e87101f69f319521./fedora/releases/$releasever/Everything/source/SRPMS/#mirrorlist=httpshttpdocsj/doc/c9254fc4e87101f69f319521./metalink?repo=fedora-source-$releasever&arch=$basearchenabled=0metadata_expire=7dgpgcheck=1gpgkey=file/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch退出并保存即可#yumcache

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 策划方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁