linux下编译内核文档格式.docx
《linux下编译内核文档格式.docx》由会员分享,可在线阅读,更多相关《linux下编译内核文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
二、实验内容
1.在虚拟机下安装某一Linux的发行版(推荐CentOS)
2.从内核官网www.Kernel.org下载某一新的内核版本,并进行编译
3.设置系统引导管理器(推荐Grub),使得系统可以从新内核启动
4.编写一个简单的模块化字符设备驱动程序,动态地装载和卸载以模块形式存在的字符设备驱动程序。
同时,学会对所编写的字符设备驱动程序进行测试,最终了解Linux操作系统是如何管理字符设备的
基本要求:
(1)编写初始化和注销函数:
scull_init()和scull_exit();
(2)编写5个基本的设备接口函数,包括scull_open(),scull_write(),scull_read(),scull_ioctl()(3和scull_release();
(4一个测试程序来测试所编写的字符设备驱动程序。
三、实验环境
1.软件环境:
Windows8.1
VMwareWorkstation11.0.0
UbuntuKylin14.10
2.硬件环境
AMDA8-3520M
四、程序设计与实现
1.下载并安装VMwareWorkstation以及Ubuntukylin14.10
开机先获取root权限
qun@ubuntu:
~$sudosu
[sudo]passwordforqun:
root@ubuntu:
/home/qun#
打开系统查看系统信息
接下来的实验都是在获得root权限下操作的。
按住ctrl+alt+t打开终端,并输入uname-a以查看内核版本信息
可见此版本是ubuntu3.18的内核(因为已经编译所以是3.18)
2.下载内核并编译
(1)将最新内核下载到桌面,通过以下命令移动到/usr/src目录下:
(2)解压下载好的内核文件,输入cd/usr/src后按回车,再输入tar-xvflinux-3.18.tar.xz后按回车,解压得到linux-3.18。
(3)进入/usr/src文件夹(cdlinux-3.18),然后执行makemenuconfig
(这一步图片没有了,问题解决后,不会出现错误提示)
提示缺少ncurses的库,查了一下XX,需要输入apt-getinstalllibncurses5-dev来安装缺失的库。
(4)安装好之后再执行makemenuconfig即可设置,我是参考
设置之后选择Save一下便退出,然后执行make
这一步花费时间最长,我是晚上十一点多执行的,知道凌晨1:
30才执行完,一直守候在电脑前不离不弃,太坑了,早知道要这么长时间就第二天在弄了。
。
(5)按照顺序执行makemodules_install和makeinstall
(6)执行之后然后重启,打开终端输入uname–a查看内核版本信息,会发现变成了linux-3.13.6
证明编译内核成功。
但是为什么默认内核变成了新编译的内核,我却无法选择,然后又搜了一些资料,找到解决的方法,会在接下来步骤提到。
(7)实现开机选择内核
重启电脑,可以实现选择内核,新内核就在启动菜单中了
(8)将编写好的驱动,通过终端打开:
1.编译驱动程序。
在控制台下进入文件所在目录,输入命令make。
如图:
没有错误提示,说明make成功,进入文件夹下可以看到多了一些.k,.ko之类的文件。
这就是编译好的模块。
2.
装载模块。
同样,必须要是root下才能进行。
装载前,我们可以先看看系统中的模块:
lsmod
装载,输入命令:
insmoddevDrv.ko
完成后,再看看系统中的模块,发现多了一个模块“devDrv”,表示我们成功加载了!
可以用命令查看系统日志信息:
dmesg
看到如下信息:
这是在我们的驱动程序中注册函数输出的内容
3.分配次设备号。
每个文件都有两个设备号,第一个是主设备号,标识驱动程序,第二个是从设备号,标识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他们.设备文件的的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序.。
分配前,我们必须要知道主设备号(其实在上一步中我们从dmesg中已经看到主设备好为250):
cat
/proc/devices
可见到这一行:
250myDevice,是了,主设备号为250.
现在我们分配从设备号:
mknod/dev/myDevicec2500
实际上就是在虚拟文件夹/dev/中加一个设备(在系统看来是文件)myDevice,注意,这个是设备名,在测试文件中真是要利用这个设备名打开设备。
最后的0表示从设备号。
可以随便分配(只要不冲突)。
此后便可以在/dev/目录下看到新建的设备myDevice了:
ls/dev/
一切成功的话,就可以测试我们的驱动程序了
4.测试驱动程序。
首先要编译测试程序:
gccdrvTest.c-osb
得到sb可执行程序,再执行:
./sb
测试程序首先列出所有的设备名,让我们选中一个,输入myDevice:
正确读出之前存放在设备中的字符串!
然后提示让我们输入一个字符串。
五、实验收获与体会
开始安装Ubuntu后,开机进入的界面是类似于终端的界面,没有图形界面,后来查了一下,才知道输入startx才是打开桌面程序。
还有就是更新源的问题,系统默认是美国的源,更新一些东西的时候总是失败,后来查了一下才知道问题所在,然后把更新源改成了北交,再加上学校的IPV6网,下载更新简直神速。
其实还有遇到好多问题,比如无法上网、无法从主系统拷贝文件到虚拟机什么的,都是通过XX搜索解决的,就不一一列举了。
因为之前基本没有用过Ubuntu,对Ubuntu一无所知,通过这次实验,大致了解了一下Ubuntu的基本操作和原理。
每次操作都非常的大胆,做错了大不了从新安装Ubuntu,反正是虚拟机,不是太在乎。
没怎么用到书,因为感觉书上的东西还要自己慢慢找,然后就一直通过搜索引擎查找想要的知识,但是网上的资源良莠不齐,还得慢慢辨别是否实用。