📄 linux设备驱动程序学习(0)-hello, world!模块 - linux设备驱动程序 - tekkaman ninja.htm
字号:
<DIV
style="TEXT-ALIGN: left">一个学习Linux设备驱动程序都会碰到的第一个例程:<BR><BR></DIV></DIV>
<TABLE style="BORDER-COLLAPSE: collapse"
borderColor=#999999 cellSpacing=0 cellPadding=0
width="95%" bgColor=#f1f1f1 border=1>
<TBODY>
<TR>
<TD>
<P
style="MARGIN: 5px; LINE-HEIGHT: 150%"><CODE><SPAN
style="COLOR: rgb(0,0,0)"><SPAN
style="COLOR: rgb(0,0,204)">#</SPAN><SPAN
style="COLOR: rgb(255,0,0)">include</SPAN> <SPAN
style="COLOR: rgb(0,0,204)"><</SPAN>linux<SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>init<SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>h<SPAN
style="COLOR: rgb(0,0,204)">></SPAN><BR><SPAN
style="COLOR: rgb(0,0,204)">#</SPAN><SPAN
style="COLOR: rgb(255,0,0)">include</SPAN> <SPAN
style="COLOR: rgb(0,0,204)"><</SPAN>linux<SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>module<SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>h<SPAN
style="COLOR: rgb(0,0,204)">>
</SPAN><BR>MODULE_LICENSE<SPAN
style="COLOR: rgb(0,0,204)">(</SPAN><SPAN
style="COLOR: rgb(255,0,255)">"Dual
BSD/GPL"</SPAN><SPAN
style="COLOR: rgb(0,0,204)">)</SPAN><SPAN
style="COLOR: rgb(0,0,204)">;</SPAN><BR><BR><SPAN
style="COLOR: rgb(0,0,255)">static</SPAN> <SPAN
style="COLOR: rgb(0,0,255)">int</SPAN>
hello_init<SPAN
style="COLOR: rgb(0,0,204)">(</SPAN><SPAN
style="COLOR: rgb(0,0,255)">void</SPAN><SPAN
style="COLOR: rgb(0,0,204)">)</SPAN><BR><SPAN
style="COLOR: rgb(0,0,204)">{</SPAN><BR> printk<SPAN
style="COLOR: rgb(0,0,204)">(</SPAN>KERN_ALERT
<SPAN style="COLOR: rgb(255,0,255)">"Hello,
Tekkaman Ninja !\n"</SPAN><SPAN
style="COLOR: rgb(0,0,204)">)</SPAN><SPAN
style="COLOR: rgb(0,0,204)">;</SPAN><BR> <SPAN
style="COLOR: rgb(0,0,255)">return</SPAN> 0<SPAN
style="COLOR: rgb(0,0,204)">;</SPAN><BR><SPAN
style="COLOR: rgb(0,0,204)">}</SPAN><BR><BR><SPAN
style="COLOR: rgb(0,0,255)">static</SPAN> <SPAN
style="COLOR: rgb(0,0,255)">void</SPAN>
hello_exit<SPAN
style="COLOR: rgb(0,0,204)">(</SPAN><SPAN
style="COLOR: rgb(0,0,255)">void</SPAN><SPAN
style="COLOR: rgb(0,0,204)">)</SPAN><BR><SPAN
style="COLOR: rgb(0,0,204)">{</SPAN><BR> printk<SPAN
style="COLOR: rgb(0,0,204)">(</SPAN>KERN_ALERT
<SPAN style="COLOR: rgb(255,0,255)">"Goodbye,
Tekkaman Ninja !\n Love Linux !Love ARM ! Love
KeKe !</SPAN></SPAN></CODE><CODE><SPAN
style="COLOR: rgb(0,0,0)"><SPAN
style="COLOR: rgb(255,0,255)">\n</SPAN></SPAN></CODE><CODE><SPAN
style="COLOR: rgb(0,0,0)"><SPAN
style="COLOR: rgb(255,0,255)">"</SPAN><SPAN
style="COLOR: rgb(0,0,204)"></SPAN></SPAN></CODE><CODE><SPAN
style="COLOR: rgb(0,0,0)"><SPAN
style="COLOR: rgb(255,0,255)"></SPAN></SPAN></CODE><CODE><SPAN
style="COLOR: rgb(0,0,0)"><SPAN
style="COLOR: rgb(0,0,204)">)</SPAN><SPAN
style="COLOR: rgb(0,0,204)">;</SPAN><BR><SPAN
style="COLOR: rgb(0,0,204)">}</SPAN><BR><BR>module_init<SPAN
style="COLOR: rgb(0,0,204)">(</SPAN>hello_init<SPAN
style="COLOR: rgb(0,0,204)">)</SPAN><SPAN
style="COLOR: rgb(0,0,204)">;</SPAN><BR>module_exit<SPAN
style="COLOR: rgb(0,0,204)">(</SPAN>hello_exit<SPAN
style="COLOR: rgb(0,0,204)">)</SPAN><SPAN
style="COLOR: rgb(0,0,204)">;</SPAN></SPAN></CODE></P></TD></TR></TBODY></TABLE><BR>我将其复制到我的工作目录,并编写了一个简单的Makefile文件:<BR><BR>
<TABLE style="BORDER-COLLAPSE: collapse"
borderColor=#999999 cellSpacing=0 cellPadding=0
width="95%" bgColor=#f1f1f1 border=1>
<TBODY>
<TR>
<TD>
<P
style="MARGIN: 5px; LINE-HEIGHT: 150%"><CODE><SPAN
style="COLOR: rgb(0,0,0)">KERNELDIR <SPAN
style="COLOR: rgb(0,0,204)">=</SPAN> <SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>home<SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>tekkaman<SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>working<SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>SBC2440<SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>linux<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>2<SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>6<SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>22<SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>2<BR> <SPAN
style="COLOR: rgb(0,0,204)">#</SPAN> The current
directory is passed to sub<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>makes as
argument<BR>PWD <SPAN
style="COLOR: rgb(0,0,204)">:</SPAN><SPAN
style="COLOR: rgb(0,0,204)">=</SPAN> $<SPAN
style="COLOR: rgb(0,0,204)">(</SPAN>shell
pwd<SPAN
style="COLOR: rgb(0,0,204)">)</SPAN><BR>INSTALLDIR
=
/home/tekkaman/working/rootfs/lib/modules<BR><BR>CROSS_COMPILE <SPAN
style="COLOR: rgb(0,0,204)">=</SPAN><SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>home<SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>tekkaman<SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>working<SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>crosstool<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>gcc410<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>k26222<SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>gcc<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>4<SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>1<SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>0<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>glibc<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>2<SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>3<SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>2<SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>arm<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>9tdmi<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>linux<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>gnu<SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>bin<SPAN
style="COLOR: rgb(0,0,204)">/</SPAN>arm<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>9tdmi<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>linux<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>gnu<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN><BR>CC <SPAN
style="COLOR: rgb(0,0,204)">=</SPAN> $<SPAN
style="COLOR: rgb(0,0,204)">(</SPAN>CROSS_COMPILE<SPAN
style="COLOR: rgb(0,0,204)">)</SPAN>gcc<BR><BR>obj<SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>m <SPAN
style="COLOR: rgb(0,0,204)">:</SPAN><SPAN
style="COLOR: rgb(0,0,204)">=</SPAN> hello<SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>o
<BR><BR>modules<SPAN
style="COLOR: rgb(0,0,204)">:</SPAN><BR> $<SPAN
style="COLOR: rgb(0,0,204)">(</SPAN>MAKE<SPAN
style="COLOR: rgb(0,0,204)">)</SPAN> <SPAN
style="COLOR: rgb(0,0,204)">-</SPAN>C $<SPAN
style="COLOR: rgb(0,0,204)">(</SPAN>KERNELDIR<SPAN
style="COLOR: rgb(0,0,204)">)</SPAN> M<SPAN
style="COLOR: rgb(0,0,204)">=</SPAN><SPAN
style="COLOR: rgb(0,0,204)">$</SPAN><SPAN
style="COLOR: rgb(0,0,204)">(</SPAN>PWD<SPAN
style="COLOR: rgb(0,0,204)">)</SPAN>
modules<BR><BR>modules_install<SPAN
style="COLOR: rgb(0,0,204)">:</SPAN><BR>
cp hello.ko $(INSTALLDIR)<BR><BR>clean<SPAN
style="COLOR: rgb(0,0,204)">:</SPAN><BR> rm
<SPAN style="COLOR: rgb(0,0,204)">-</SPAN>rf
<SPAN style="COLOR: rgb(0,0,204)">*</SPAN><SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>o <SPAN
style="COLOR: rgb(0,0,204)">*</SPAN><SPAN
style="COLOR: rgb(0,0,204)">~</SPAN> core <SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>depend <SPAN
style="COLOR: rgb(0,0,204)">.</SPAN><SPAN
style="COLOR: rgb(0,0,204)">*</SPAN><SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>cmd <SPAN
style="COLOR: rgb(0,0,204)">*</SPAN><SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>ko <SPAN
style="COLOR: rgb(0,0,204)">*</SPAN><SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>mod<SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>c <SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>tmp_versions<BR><BR><SPAN
style="COLOR: rgb(0,0,204)">.</SPAN>PHONY<SPAN
style="COLOR: rgb(0,0,204)">:</SPAN> modules
modules_install
clean</SPAN></CODE></P></TD></TR></TBODY></TABLE><BR>说实话,以上是我参考了《Linux设备驱动程序(第3版)》的Makefile源码修改得来的。我对Makefile不是很了解,是该好好学习学习了!<BR><BR>然后就是make
modules 、 make modules_install 。<BR><BR>
<TABLE style="BORDER-COLLAPSE: collapse"
borderColor=#999999 cellSpacing=0 cellPadding=0
width="95%" bgColor=#f1f1f1 border=1>
<TBODY>
<TR>
<TD>[root@Tekkaman-Ninja Helloworld]# make
modules<BR>make -C
/home/tekkaman/working/SBC2440/linux-2.6.22.2
M=/home/tekkaman/working/Linuxdriver/Helloworld
modules<BR>make[1]: Entering directory
`/home/tekkaman/working/SBC2440/linux-2.6.22.2'<BR>
CC [M]
/home/tekkaman/working/Linuxdriver/Helloworld/hello.o<BR>
Building modules, stage 2.<BR> MODPOST 1
modules<BR>
CC
/home/tekkaman/working/Linuxdriver/Helloworld/hello.mod.o<BR>
LD [M]
/home/tekkaman/working/Linuxdriver/Helloworld/hello.ko<BR>make[1]:
Leaving directory
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -