实验 4.4.⒈ 内存的分配与使用
● 实 验 -目|妁; ∷ ∷ ∷
∷ | ∷
通过本实验掌握内核编程中内存的分配
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
。
● 实验要求:
1.编写一个内核模块,在 模块中使用km引loC分配内存并访问,
使用按页方式分配内存并访问。
2.编写Mak胡b,编译内核模块
3,安装,卸 载该内核模块
● 实验器材:
软件:安 装了RHEL5的 vmware虚拟机
硬件:PC机 一台;min⒓440开发板一套
● 实验步骤:
∷∷∷ ∷∷∷ Ⅱ力∷阝婢霍呷∷唪Ⅱ岭蛳 始使用Nf醯 根文件系∷ ∷ ∷∷ ∷ ∷ ∶∷ ∷∷ ∶ ∶
统,内 核使用实∷姗 。3.3编译生成的内核:根 文件系统
使用/nfsrooVroofs;内核源代码使用
/home/guoqian僻3ˉ 1ˉ川huxˉ2s。29,内 核源代码必须经
过实验4.3.3编译过。
公司地址:成 都市牛王庙东∷恒国:际1栋 2∷期701 ⒛ 6
1,创 建实验目录
#mkdir/home/guoqian/4ˉ4 1ˉ
#Cd/home/guoqian/4砰-1
lrootElocalhost /l# nkdir -F /honelguoqien/4-4-L
Iroot€localhoat l] # ed fhome/guogian
lroot0locelhost gruogianl # ls
△¨ △¨ 刂 -△ 3¨ 4ˉ 2ˉ 工 每 2ˉˉ 3 姐 2¨-5 4¨ 3¨ ⊥ 刂 -3-3
-△冖2 刂 -土 -0 刂 2¨¨ 2 4冖 2¨ 4 刂 2¨-6 刂 3¨¨ 2 4¨ 3-刂
4¨3ˉ5 4¨ 4¨ 工
4-3¨ 6
Iroot9localhost guoqianl# $
2,根 据实验要求编写代码aIbc mem.c、MakefIe(见实
验代码光盘4砰 1ˉ)
特 别 强 调 MakeΠ丨e中 KDIR指 的 是mini2440开 发 板 所 使 用
的linux系统内核源代码路径,即 是实验4,3,1所 使用的内
核,且 内核必须编译过。
浊口图:
〖〓。。te工 oc巳 上ho臼 t 刂 -tˉ △ ,扌 pod
gu0q王 an'刂
口4⋯ △
【〓。。tgェ。ca△h。‘t 4-t-△1忄 △B
l"loc nrern " r &l*I:*f ila
【〓°。te工 ooaェ h。 臼t 4¨ 刂 -⊥ J艹 Ⅱ
公司地址:成 都市牛王庙东恒国际 1栋 2期 701 20T
#vi Ma∷keⅡ丨e
, 土 £n●q (,(R臼 RⅡE=JB〓 L〓Rs〓)、 ) |
↓ obj-m :〓 a工 工o:小 o’1I”°
如Ⅱ θ工so
△
KD工 R ∶ 〓 /ho"e/gu。 qェ 已 n/4¨ 3⋯ ⊥ /工 出 △ uxo2。 6.29
1 a△ 亠:
I make ˉ C 串 【ⅡD工 R》 Ⅱ =审 亻P羽 D) Ⅲ odu亠 ●s m0H:a:m cRo$s C咖
P工 =jE〓 a〓 mˉ 工 土 nuXˉ
森 ˇC工 oan:
篮廴 〓 m 亠 £ ☆ .ko 忄 ∷=0 ★ .mod” o ★ 。"ρ d∷·C 女 。。Fwre〓 s ∷ ∷moau工
☆
。
笺↑
△三 hd土 £
说明:上 图第7行为变量KDlR定义。
3,编 译内核模块并拷贝内核模块到根文件系统
#make
说明:上 图引b⒐mem。ko为编译生成的内核模块。
#cp aⅡoc~mem。 ko/nfsroot/rootfs/tmp
〖:。 。tC△ o。 a△ host 4△ 4-△ :井 p"d
/gu。q亠an/刂-t-土
〖〓。。te工o¤aェho:t 刍ˉt 王ˉl艹 工s
lLoe men"c a1loc_nen.mod.c al loc_men.o nodulaa
"order
llos nen. ko alloc mrn.nod. o B{ahsf ile ldodule , s!ilvers
∶〓∞ 顶 △oca△ host4△ △ 1扌 蘑
公司地址:成 都市牛王庙东恒∷国际 1栋 2期 701 ⒛ 8
1=。 otC工 。ca工 ho‘ t 吐 ¨刂 -工 l衤 △ 8
a]- loc rnem. c al loc men.rnod.c a1loc men.o npduleB .otder
rlloc nern. ka alloc-nen.nod. o gakeffle !{odu1e . sflmrers
lroot8locelhoet 4-4-X] * cF el loc_mem.ko . /nf ,aroot/rootf ,s, / t rnp/
【r° ot¤ 工°ca工 host 犭 ˉ刂 -△ ∶社 工 s /n£ s=oot/root£ s/tmp/
a王 工oC "em‘ ko
【=。 °t@工 °ga工 ho臼 t 吾 ¨4ˉ ⊥ :艹 簿
4.通 过NFS方 式起文件系统
ω△吁叫t艹|雠Φ∶∷●'沼助:⑽
5.加 载内核模块
#insmod alloc mem。ko
注:注 意观察输出语句
s3c2&60-sdi s3c26&0-sdi: runnins at 0kHz trequested: OkHz).
s3c24t+0-sdi s3c26&0-sdi: runnins at 198kHz {requested: 197kHzl.
s3c2660-sdi s3c2&60-sdi: runnins at 198kHz {requested: L97kHz).
s3c2tr&O-sdi s3c2640-sdi: runnins at 198kHz (requested: 197kHz).
s3c2t60-sdi s3c2t60-sdi : porered down.ls3c2t60-sdi s3c2t60-sdi : porered down.
leth0: l ink dorn
I lP-Confis: Guessins netrask 255.255.0.0
fIP-Confio: Conplete:
I deu ice lg thQ, addr=172.18 .20 .55 , nask=255.255.0 .0 , sL=255.255.255.255,
I hott=L7z.18.20.55, dorain=, nis-dorain=(none),
,1 bootserver=2ss.255.255.255, rootserver=172.I8.29.21r, rootpath=
|:∶∶饣:l:iI∶ ∶∶∶∶1∶:0l;:,∶:::::∮∶∶:;☆∶∶:0::o∶:o:: ·
VFS: i lounted root (nfs f i lesyste l ) on device 0:11.
Freeing init nenory: L2lrR
Processing /etc /prof i Ie . . . Done
s
公司地址:成 都市牛王庙东恒国际 1栋 2期 701 209
??
?
?〓?
?〓??〓??〓?
eth0∶ link do"n
IP_Cohfig: Guessihg hetmask∶255∶ 255.0
i∶∶∶∶|:;∶:∶::∶丨宫:言;∶言言;∶善言言:营∷;言:∶∶;:i
oth0∶ ∷link up, 100"bps, full_d1plex,
Lo0kino∷up port of∷RPC 1000O5/1|oh· 17
苫::∶∶甘:|:l::∷°;;:∴;!f显0:;lFFy∷F|∷:!∴∷
∶°n
P∞ ∞ 忘siho'△ yp|0file..∷ 00|o∷
i
坶盅氛厶I∷∷∴∷∷iⅡ∷∷BUF 1 ∶ (<( -ˉ 亠 ∷κh芭lloo i"0"∷0κ⒈-⊥工 9
BUF 2 ∶ <<<-ˉ ˉ∶Get Free pa0o∴OK∶ -ˉ ˉ冫))∶ ∶ ∷∷∷∷∷∵∷ ∴∷∶∷ ∷ ∷∵|∶|
‖ =∷
∷
∷ I ∷ ∶ ∷ Ⅱ ∷ Ⅱ ∷
∶ -∷ ∷ ∷ ∷ ∷ ∷
〓
???
?
"5200θ -△ 】ˉ s。 s9⒒ ∷ 亠 ¢ I棚
说明:大 家可以看到在加载模块时.模 块初始化函数
a丨loc~in⒒被调用。该函数使用函数kma丨bc和函数
ge△ ∞ roed~page分 配 内 存 :并 使 用 分 配 的 内 存 c
6,使 用|smOd查看内核模块是否被加载
#lsmod
公 司姊‘址·咸'都市丰王庙东恒国际 1栋 2期 701 210
文件 ⑴ ∷榻辑 ⑴ ∷查看∷Φ ∷呼叫 C) 传 送 α)∵帮助 Ql)
D∵e∷昏 晷 蚜Dm曾
⒈ lihk∷Ⅱidowh
IP△Gonfig ⅡGuessino netmask255∶?s0∶Q=Q
∷∷∷∷∷ ∷ ∷∷∷∷∷∷ ∷∷∷∷Ⅱ∷∷∷∷∷∷∷Ⅱ∷∷
∷∷∵∷∷∷∷∷∷∷∴∷∵∷∷Ⅱ∷∷∷ ∷ ∷∶∷∶∷∷|∷∴|∶Ⅱ ∴ ∷∶∷
∷∷∷∷∷∴∷∷∷∷∷
跗Ⅱ∶∷(1∷{=∶。ζ:早:羧∴携:∶?弘
营f翠:;0Ⅱ∷Ⅱ△Ⅱ-Ⅱ0Ⅱ00咖
》∷)>∷
∷)》》
已连 接 0:00∶ zl烟斑 W
说明:大 家可以看到我们的a丨|oc mem内核模块已经成功
地安装到了系统中。
7.卸 载内核模块
#rmmod aI丨 oG mem
公司地址:成 都市牛王庙东恒国际 1栋 2期 701 211
D∷ε 咖∷∴ε 霉D己彐
说明:内 存有分配就有回收‘kmalbc对应的回收函数是
kfree;按页方式分配内存对应的回收函数是free~page。
8,再 次查看内核模块
#丨smod
公司地址:成 都市牛王庙东恒国际 1栋 2期 701 212
文件Φ 龆 辑迤)Ⅱ查看ω ∷|呼叫迤)∷传送① 帮 助α)
茁 占
I蕃
冶
t百
o’ 爹 首
∵
∵
ˉ ⋯ ˉ ˉ
Pr00essihg /etc/∷ 0冖 ofile,,∶ ∷Dohe ∷ ∵∷∷∷∷
∷ ∷ ∷ ∷ ∷ ∷ ∷ ∷ ∶∷ ∶ ∷ ∷
Ⅱ
∷
∷
抖 od /t"o/ ∷
艹:ls ∷ =
犷::茹峦%l:。⊥i∶“∶k。∷ ∷ ∷
BVF 1∷ : 《 << -ˉ
工
∴ κ malloc "e"∷ 0κ 9 --ˉ >9>
瑟蓬盛∴蕊氵&∷掇瑙驴「∶∵
‖ ∷ ∷∷∷ ∷ ∷I ∷
∶ii∶::|臌:∶媚疝知;∶∴乩∷
‖ ∷ ∷
∷
∷ ∷
∶
∷
扛 lFⅡ0|∷∷ ∷ Ⅱ ∷∷∷ ∷ ∷ ∷ ∷ ∷
已 膦 0∶ 00:Ot h-
说明:从 |smod的运行结果大家可以清晰地发现.我 们的
he丨lo内核模块已经成功从系统中卸载了c
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
:C语 言中我们经常用到mal|oc分配内存,并使用函数free
来回收内存;内 核中我们使用kma丨loc或者按页方式来分配内存.
一般来说kma丨丨oc适用于分配小于128KB的 内存.在 不使用分配的
内存时记得要回收内存c
公司地址:成 都市牛王庙东恒国际 1栋 2期 701 213
实验 4口4。⒉ 内核链表
● 实验 目的:
通过本实验掌握内核链表的创建、插入、删除、遍历等操作。
● 实验要求:
1.编写一个内核模块,在 模块加载函数中创建一个内核链表,
遍历访问该链表;在 模块卸载函数中删除链表中的结点
2.编写Makefib,编译内核模块
⒊安装,∷卸载该∵内核模块 ∷ ∷ ∶ ∷
● 实验器材:
软件:安 装了RHELs的 mˇware虚拟机
硬件:PC机 一台;min⒓440开发板一套
● 实验步骤:
1.创 建实验 目录
#mkdir/home/guoqian/4冫卜2
#Cd/home/guoqian僻彐卜2
公司地址:成 都市∴牛王庙∷余恒国际 1栋 2∷期70i ∶ 214
[root0locrl,hoet /l# nkdir -p lhone/guoqirrn/44-2
[root8locrlhost /] * cd lhonc/gruoglen
lroot$locelhost gruoqienlf ls
-△ -△ 刂 -⊥ 3¨ 4¨ 2¨ 工 4¨ 2¨ 3 每 -2-5 刂 -3-工 刂 -3-3 刂 -3-s 之 口刂 1¨
-△ 2¨ 4¨ ⊥。4 △ 2ˉˉ 2 电 2ˉ¨ 之 4。 2¨ 6 刂 3¨-2 之 3ˉ¨ 圮 4¨ 3ˉ 6 刂 口刂-2
【〓。。te工 ooaェ h。 臼t gu0q土 m】 艹 馕
2.根 据实验要求编写代码m叨u。c、Makenh(见实验代码
光盘4·4。2)
3.编 译 内核模块并拷贝内核模块到根文件系统
#make
说明:上 图m丿d。ko为编译生成的内核模块。
#cp mylistiko/nfsrooUroofs/tmp
:〓。。t¤工。。亠△ho臼t‘ 宅¨△2:仆 p"d
σu°臼△:n厂4·刂⋯2
:〓。。t@工 。。a王ho臼t 刂 冖吒 △2口 艹 △ 臼
u。 du△ ● 。Ⅱ yⅡ
″ ● :。 ∷ my△ 亠 Bt。 ko w工 ± Bt。 nod。 o
.ordrr uyJ. iat ,c ryl ist .aod.c nyl i t t ,o
!:。 0te工oGaェh。臼t △ 刂¨ 2ˉ:艹 攮
公司地址:戚 都市∴牛王庙东桓曰际 1栋 2期 70, 2∷ Is
∶=°。te亠ocaェh。st 刂-‘-2∶# 王s
kef i le Module
"sf ' i lvr ts nyl ict . lco nyl iet ,nod.o
● s.0Fde‘ Ⅲ VI土 £ t‘ r nylist .nod. c nyli.st . o
【:o。 tO工 oca工 host 4— 每 -21社 gp my工 土st.ko /nfs〓 oo乜 /=oot£ s/tmp/
〖=° 。t@工 。Ca工 ho臼 t △ -刂 -2:# 王 s /n£ B=oot/root£ 臼/△ mp/
a工工oc=Ⅱ e,△ ·k。 ’ iy工 土stˇ ko
【roote王 oCa工 host 刂 4ˉ-21# 簿
通过NFS方 式起根文件系统
加载内核模块
#insmod mylist。ko
#lsmod
注:注 意观察输出语句
衤溶Φ moo△
吝飨:∶ε△帕|臼
4.
5.
说明:大 家可以看到在加载模块时,模 块初始化函数
m叨⒗LinⅡ被调用,在 模块加载函数中,创 建了一个内核链
ooκ△ng up port o丨 Kr△ △uuuuu'z on △rz,△v。zu.z厶
::母in:i:奋 甘:∴t1:睾"社βδ,1:莒古:ξ丿Fp::xi71?昱:?犭备:::Looking up port of RPC tgg0g5/7 on l-12.18.29.2t,
VFS: l lounted root (nfs f i lesysten) on device 0:11.
Freeing init nenory: L2l+R
Processing /etc/profiIe. . . Done
S cd tnp/
S insnod ryl ist .ko
student 5 nane: Student5
student 6 nane: Student/+
student 3 nare: StudentS
student 2 nare: Student2
student 1 nane: Student l$
S lsrod
rylist t6I2 0 - Live 0xbf000000
s_
公司骁址:咸 ,都市丰王庙 东恒国际 1栋 2期 701 216
表,该 链表的数据域是姓名lnamel和学号(num),指针域
为loLhead;接着使用丨⒗Ladd前插法来插入节`点,使 用
lisLfo廴each遍 历 整 个 链 表 ,使 用 l⒗Lentγ 找 出 数 据 结 构 指
针。
6.卸 载内核模块
#rmmod mylist
制smod
说明:在 卸载模块函数中,采 用for循环的方式删除链表节
点。源代码留了一个思考给大家,将for转换成l⒗t for eaCh
遍历的方式来删除节j点。
reei.ng init rerory:
i ng l e t c l p ro f i l e . . . Done
il cd trp/
* insrod ry l is t .ko
5 nare: Student5
tudent Ir nare: Student4
tudent 3 nare; StudentS
student 2 nare: Student2
student 1 nere: Studentl
1sood
list 1612 0 - Live Oxbf000000
* rrrod rylist
rrrod: rodule ' ry l ist ' not found
* Islod
公司地址∷成都市牛王庙东恒国际 1栋 2期 701 217
总结:内 核链表很重要。可以说是在内核中使用的最广泛数据
结构,尤 其是函数丨⒗辶entry的实现方法。大家可以去查看内核源
代码,看 看它是如何实现的,对 于你后期学习有很大帮助。
八 曰 砧:llI·甫 龆 市 丰 丁庙 黄桓 囟际 1∷楱 2珀 7o1 21∷8
实验 4■4■⒊ 内核定时器
● 实验目的:
在后期的驱动学习中,我 们会学习到一种很重要的字符设
备驱动一触摸屏驱动,触摸屏中有这样一种操作方式:当 触摸
笔按下后,触 摸笔一直处于滑动状态没有离开触摸屏,为 了能
获得滑动状态下的坐标,我 们采用的是定时器的方式。所以这
里先学习一些内核定时基本操作。
通过本实验大家需要掌握以下几个知识,点:
1.如 何初始化内核定时器
2.如 何启动一个内核定时器
3.如 何删除内核定时器
● 实验要求:
1,编写内核模块,在 模块中启动一个定时器,5秒 后超时,超
时后任意打印一条信J包
2.编写Makefl忆,编 译内核模块
3.安装,卸 载该内核模块
● 实验器材:
公司地址:成 都市牛王庙∷东恒国∷际1栋 2期 70J zI9
软 件 :安 装 了 RHEL5的 vmware虚 拟 机
硬件:PC机 一台∷而in⒓44o开发板一套
● 实验步骤:
1,创 建实验 目录
#mkdir/home/guoqian/4ˉ4 3ˉ
#Cd/home/guoqian/4o4ˉ3
2.根 据实验要求编写代码刂me∴c、MakeⅡh(见 实验代码
光盘4砰 sˉ)
3.编 译内核模块并拷贝内核模块到根文件系统
#∷make
lroot0lacelhoEt ll# nrkdir -p lhone/gtrogian/{-{-3
lroot0localhcst /l # cd lhone/gruoqian
ltoot8localhoet gruogianl f Ie
-⒒-△ △ 。亠 之¨ 刂 -2-3 刂 -2-‘ 刂 3¨-3 之 3¨¨ 6 刂 ⋯△ 3ˉ
-△ 2¨ 4¨ 2-△ 刂 冖2q4 4ˉ 3ˉ 上 每 3ˉ。4 妊 口舍¨ 工
△¨ 3¨ 刂 -2-2 刂 2ˉ-s 每 3ˉˉ 2 4¨ 3-s 刂 刂¨-2
:=。 。t@工 。ca工 host guoq土 an:十 簿
∶=∷。0t悒 ∷工0oo工 ho臼t 4△ △△31∷带 pwd
尸guoq土ah/△·4⋯3 .
【:o0t¤ 王ooa△h¤臼t 刂 o垂·3:拌 工 s
kef i le SIoduIe,sXmvera t iner.ko t imer.mod.o
.order t imer .s t inrer.nod.e t imer.o
【=° 。t@亠。。a工ho臼讠 刂 嘻ˉ 3ˉ,苷 攥
说明:上 图Jmer。ko为编译生成的内核模块。
公司地址:戍 都市牛王庙东恒国际 1栋 ∷2期 701 2zo
#cp timer. ko /nfsrooUrootfs/tmp
:〓。。t@工。。a工hoεt 刂J。 3:艹 工s
atrref ile Module . slrmvets tiner . ko tiner .mod . o
t iner .nod,c t iner .o
【r。 。t妲 工。caho‘ t 惩 -0¨ 3:# 。 p t土 J1Ior。 ko /nF臼 =oot/〓 oot£ s/讠 mp/
〖:。 。te工 o¤ aェ host 刂 ·刂 3ˉ】 艹 王 s /n£ s〓 o。 △/:oot£ s/tmp/
∶::::百I::三攴:。s:丫:i∶:j;: 簿t土Ⅱo〓。ko
5.
通过NFS方 式起文件系统
加载内核模块
#insmod umer.ko
#|smod
说明:大 家可以看到在加载模块时,模 块初始化函数
公司地址:成 都市牛王庙东恒国际1栋 2期 701 221
Ⅱmer ini瞅调用,在 模块加载∷函数中,诧刂建了ˉ个内核∷定
时器,超 时时间为5秒,超 时处理函数是ume fundon。
6.超 时时间ss到达时
说明:当 定时器超时时间5s到达时,∷超时处理函数
刂me fundion被调用,打 印输出语句”△mo|Expired
and para ls5” 。
7.卸 载内核模块 ∷ ∷
#rmmod myI⒗t
社lsmod
公司地址∷成都市牛∷主庙东∷恒∷国∵际△栋 ∷2∷期∷TO1∷ ∷ 么22
DI‘亠∷∷磁螽:s∷田Dt§咱孑
{扌 :甘 s。::p亻 i"er。ko
fl
fl Isrod
tirer 1455 0 - Live 0xbf012000
fi
s Tirer Expired and para is 5 ! !
fl
not found
说明:在 卸载模块函数中,使 用d引」imer来删除定时器q
其实这里是没有实际意义的,当 定时器超时后,系 统会自
动地将该定时器删除。我们可进一步做以下实验。
8.再 次加:载内核模块,并 在5秒之内卸载该模块
#insmod myl⒗t。ko
#rmmod myl⒗t
注:卸 载模块操作,一 定要在加载内核模块操作后5秒之内
完成才能看到效果
公司地址:成 都市牛王庙东恒:目际 1栋 2期 701 zz3
D|冖热麟氵嬲Ⅱ中∷臼山臼△
* cd /ttp/
*
S insnod t iner .ko
fl
fl rrrod tirer
rnod: rodule 't irer' not found
f i _
说明:上 图截取在5秒之后,可 以发现并没有打印相应的输
出语句,说 明定时器已经被删除,函 数d引」柿er可在定时
器还未超时前将定时器删除。
总结:内核定时器应用非常的广泛,我们需掌握其基本的操作。
这里在补充一点:我们知道内核定时器一个很重要特,点是只执行
一次,如 果要多次使用内核定时器该怎么办呢?内 核中提供i函
数mod」mer,可使用该函数来修改超时时间。
公司地址:成 都市牛王庙东恒国∴际1栋 2期 701 224
实验 4。5。⒈ 系统调用
● 实验目的:
系统调用是用户空间访问内核空间的一种方式。常见的系
统 调 用 有 open、 dose、 read、 w"te。
本实验实现一个乘法的系统调用,希 望大家通过该实验明
白系统调用工作原理。
● 实∷验要求:
1.修改内核,在 内核中-添加一个实现乘法的系统调用
2.编写应用程序,使 用该系统调用
● 实验器∷材:
软件:安 装了RHELs的vmwa沌虚拟机
硬件;PC,/L一 台;mⅢ⒉40开发板一套
● 实验步貉 ∷
1j创建实验目录
社mkdir/home/guoqiah僻·5ˉ 1
+Cd/home/guoqian佴-5。1
公曰地址∷成都市牛王庙拣拒蝈际∷1拣 9期 ∷TO1 ∷∷9,s