课程4-内核驱动进阶班
更新时间:2023-04-28 07:35:01 阅读量: 实用文档 文档下载
- 中银内核驱动推荐度:
- 相关推荐
嵌入式LINUX
内核驱动进阶班实验手册
实验目录
实验1.1:x86平台内核配臵、编译和安装 (6)
实验1.2:内核模块 (15)
实验1.3:内核模块参数 (21)
实验1.4:内核符号导出 (25)
实验2.1:交叉工具链的安装与使用 (36)
实验2.2:smdk2410-uboot编译 (42)
实验2.3:mini2440开发板内核下载 (47)
实验2.4:mini2440开发板u-boot移植 (61)
实验2.5:u-boot-网卡驱动移植 (92)
实验2.6:uboot-nor flash驱动移植 (101)
实验3.1:mini2440开发板内核制作 (122)
实验3.3:nfs起根文件系统 (142)
实验3.4:ramdisk起根文件系统 (153)
实验3.5:initramfs起根文件系统 (163)
实验3.6:自启动linux内核 (172)
实验4.1:内存的分配与使用 (195)
实验4.2:内核链表 (203)
实验4.3:内核定时器 (207)
实验5.1:系统调用 (213)
实验5.2:proc文件系统 (221)
实验5.3:oops异常分析 (229)
实验6.1:简单字符设备驱动程序设计 (235)
实验6.2:并发控制 (243)
实验7.1:ioctl设备方法 (250)
实验7.2:阻塞型字符设备驱动 (257)
实验7.3:poll设备方法 (265)
实验7.4:自动创建设备文件 (273)
公司地址:成都市牛王庙东恒国际1栋2期701 5技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
实验1.1:x86平台内核配臵、编译和安装
●实验目的:
掌握X86平台下,内核的配臵、编译与安装。
●实验要求:
1.配臵、编译Linux
2.6.29内核
2.在vmware安装编译好的内核
●实验器材:
软件:
1.安装了RHEL5的vmware虚拟机
2.Linux 2.6.29内核(见实验代码光盘4-1-1)
3.关于实验中的IP地址
虚拟机IP:172.18.20.24
开发板IP:172.18.20.55
硬件:
PC机一台
●实验步骤:
1. 创建实验目录
#mkdir /home/guoqian/4-1-1
#cd /home/guoqian/
公司地址:成都市牛王庙东恒国际1栋2期701 6技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
2. 通过SMB服务将提供的Linux 2.6.29内核拷贝到实验目
录下
3. 解压内核到当前目录
#cd /home/guoqian/4-1-1
#tar jxvf linux.2.6.29.tar.bz2
解压完毕后,Linux内核源代码结构如下图所示:
4. 清理内核中间文件,配臵文件
公司地址:成都市牛王庙东恒国际1栋2期701 7
技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
#cd linux-2.6.29
#make distclean
5. 选择参考配臵文件
使用正在运行的RHEL5的内核配臵作为参考
#cp /boot/config-2.6.18-53.el5 .config
6. 配臵内核
#make menuconfig
注:这里使用默认的配臵即可
公司地址:成都市牛王庙东恒国际1栋2期701 8技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
公司地址:成都市牛王庙东恒国际1栋2期701 9 技术咨询QQ :550491596 技术交流QQ 群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
保存,退出
7. 编译内核
#make bzImage
注:内核编译大概需要几分钟时间,完成后,生成的内核
映像bzImage位于arch/x86/boot/目录下
8. 编译内核模块
#make modules
9. 安装内核模块
#make modules_install
注:完成安装后,编译好的内核模块会从内核源代码目录
拷贝至/lib/modules下,本实验会拷贝到
/lib/modules/2.6.29目录下。
公司地址:成都市牛王庙东恒国际1栋2期701 10技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
公司地址:成都市牛王庙东恒国际1栋2期701 11 技术咨询QQ :550491596 技术交流QQ 群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
10. 制作init ramdisk
initramdik 的作用: 提供一种让内核可以简单使用ramdisk 的能力。这些能力包括:格式化一个 ramdisk ;加载文件系统内容到ramdisk ;将ramdisk 作为根文件系统。
# cd /home/guoqian/4-1-1
#mkinitrd initrd-2.6.29 2.6.29
注:完成操作后,在当前目录下会生成
initrd-2.6.29
11. 安装内核
11.1 由于Linux 系统启动时,会从/boot 目录下来寻找内核文件与init ramdisk ,所以需将内核和init ramdisk 拷贝至/boot 目录
#cp /home/guoqian/4-1-1/
linux-2.6.29/arch/x86/boot/bzImage /boot/vmlinuz-2.6.29
注: vmlinuz-2.6.29可以任意取名
#cp /home/guoqian/4-1-1/initrd-2.6.29 /boot/
说明:上图/boot目录下,vmlinuz-2.6.29为内核,
initrd-2.6.29为init ramdisk。
11.2 为了让grub在启动时能提供一项我们自己制作的
linux内核的选择项,需修改grub的配臵文件
在原有内容的基础上,添加如下代码:
/***************************************************************/
title my linux(2.6.29) /*选择项名字*/
root (hd0,0)
kernel /vmlinuz-2.6.29 ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.29
/***************************************************************/
#vi /etc/grub.config
公司地址:成都市牛王庙东恒国际1栋2期701 12技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
公司地址:成都市牛王庙东恒国际1栋2期701 13 技术咨询QQ :550491596 技术交流QQ 群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
说明:18-21行为添加代码。
12. 测试新安装的内核是否能使用
重新启动虚拟机,在grub 的选择菜单中选择启动我们刚制作的内核
总结:本实验通过X86平台内核的制作,目地是让大家熟悉内核的配臵、编译安装流程
公司地址:成都市牛王庙东恒国际1栋2期701 14技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
实验1.2:内核模块
●实验目的:
通过本实验掌握内核模块的编写、编译、加载、卸载;Makefile
的编写。
●实验要求:
1.编写hello world内核模块
2.编写Makefile,编译内核模块
3.安装,卸载该内核模块
●实验器材:
软件:安装了RHEL5的vmware虚拟机
硬件:PC机一台
●实验步骤:
1. 创建实验目录
#mkdir /home/guoqian/4-1-2
#cd /home/guoqian/
公司地址:成都市牛王庙东恒国际1栋2期701 15技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
2. 根据实验要求编写内核模块hello.c、Makefile(见实验
代码光盘4-1-2)
特别强调Makefile中KDIR指的是虚拟机所使用的linux系
统内核源代码所在的路径
#vim Makefile
说明:上图第6行变量KDIR表示虚拟机所使用的linux系统
内核源代码路径。
3. 编译内核模块
#make
公司地址:成都市牛王庙东恒国际1栋2期701 16技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
说明:上图hello.ko为编译得到的内核模块。
4. 加载内核模块
#insmod hello.ko
注:注意观察输出打印语句
说明:在安装内核模块的时,内核模块初始化函数hello_init
得到调用,应该打印输出语句‖Hello World!‖;但并没有在
终端上看到相应的信息,这是因为prink输出权限不够,在
图形化界面中prink权限要求KERN_EMERG,而初始化函
数中prink语句权限为KERN_ERR;所有打印输出信息都会
保存在文件/var/log/message中,大家可以通过该文件来查
看输出信息。
#vi /var/log/message
公司地址:成都市牛王庙东恒国际1栋2期701 17技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
说明:打印输出信息位于/var/log/message文件末;上图
619行为打印输出信息。
5. 查看内核模块
#lsmod
说明:从lsmod的运行结果(hello 5632 0)大家可以清晰地
发现,我们的hello内核模块已经成功地安装到了系统中。
6. 卸载内核模块
#rmmod hello
公司地址:成都市牛王庙东恒国际1栋2期701 18技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
说明:大家可以发现在卸载内核模块的时候,内核模块卸
载函数hello_exit得到调用,打印出了‖hello exit‖语句;或
者从文件/var/log/message也可查看到打印输出信息。
#vi /var/log/message
说明:上图620行即为打印输出语句。
7. 再次查看内核模块
#lsmod | grep hello
公司地址:成都市牛王庙东恒国际1栋2期701 19技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
说明:从lsmod的运行结果大家可以清晰地发现,我们的
hello内核模块已经成功从系统中卸载了。
总结:通过一个简单的hello world模块编写,我们应该学习到模块加载函数、卸载函数调用时机,在以后的内核编程中我们会遇到很多函数,从这里开始我们应该主动的去思考这些函数的调用时机;为以后的内核驱动开发打下基础。
公司地址:成都市牛王庙东恒国际1栋2期701 20
技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
实验1.3:内核模块参数
●实验目的:
通过本实验掌握内核模块参数的使用方法。
●实验要求:
1.编写内核模块,分别实现一个整形,一个字符串型模块参数
2.编写Makefile,编译内核模块
3.安装,卸载该内核模块
●实验器材:
软件:安装了RHEL5的vmware虚拟机
硬件:PC机一台
●实验步骤:
1. 创建实验目录
#mkdir /home/guoqian/4-1-3
#cd /home/guoqian/4-1-3
公司地址:成都市牛王庙东恒国际1栋2期701 21技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
2. 根据实验要求编写内核模块代码param.c、Makefile(见
实验代码光盘4-1-3)
3. 编译内核模块
#make
说明:param.ko为编译生成的内核模块。
4. 加载内核模块
4.1 不加内核参数,使用其默认值
#insmod param.ko
说明:大家可以发现在加载内核模块的时候,内核模块初
公司地址:成都市牛王庙东恒国际1栋2期701 22技术咨询QQ:550491596 技术交流QQ群:65212116 电话:028-******** 网址:f2db524acfc789eb162dc839
正在阅读:
课程4-内核驱动进阶班04-28
会计电算化实习日志02-17
学生会纪检部工作总结格式12-22
大学物理规范作业(本一)22解答06-02
(部分)国家安全知识试题 及答案(1)11-12
科技成果转移转化与规模产业化实训班10-25
信陵君窃符救赵08-05
综治年度述职报告04-04
03土建定额解释答疑(沈大伟)03-26
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 进阶
- 内核
- 驱动
- 课程
- 福海县职称论文发表-电力企业运营监测全面监测配网监测项目监测论文选题题目
- 城市轨道交通DCS系统数据安全传输设计
- 【期末提升】2020年人民版高中历史必修第二册专题六《罗斯福新政与当代资本主义》单元测试卷
- 2021年“党建促业务、业务促党建”心得体会
- 2018年浙江工业大学法学院659法学综合之宪法考研仿真模拟五套题
- HACCP管理体系审核员时间表及多现场抽样标准
- 2018年中山大学药学院(深圳)668化学综合之无机化学考研冲刺狂背五套题
- 苏教版数学三年级下册《求一个数的几分之几是多少的实际问题》教案设计
- 2018云南迪庆公务员面试备考的四个经验之谈
- 卷烟营销策划方案ppt
- 压缩机市场研究报告
- 2018-2019年高中化学人教版《必修二》《第一章 物质结构 元素周期律》《第二节 元素周期律》综
- 九大步骤之5-入市良机(1)
- 缙云县小学科学教师参考手册
- 博达防火墙使用说明书
- 书法用纸与选纸简介
- 2020届高三语文文学性名家阅读之“陈忠实”主题专练
- 【英语】 七年级英语下册任务型阅读综合测试卷经典
- 信号工安全操作规程标准范本
- 最新人教版三年级上册数学《期末考试试题》附答案