免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1639 | 回复: 0
打印 上一主题 下一主题

关于第一个模块化编程HelloWorld的详细介绍 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-27 21:14 |只看该作者 |倒序浏览
      笔者刚刚接触linux设备驱动,今天按照LDD3的第一个HelloWorld模块化编程实践了一下,期间遇到很多问题,因而想和大家详尽的介绍一下每一步步骤,希望对初学linux设备驱动的朋友有些许帮助,介于笔者刚刚接触linux设备驱动才两天,本帖中的一些错误,希望大家不吝指出。
      一、先要取得一个linux的操作系统,笔者的是mint12(其实基本上有终端的linux发行版都可以),打开终端,切换超级用户,到www.kernel.org上去下载一份linux的内核源代码,要是想在本机上运行一定要下载和本机内核版本一样的源码进行编译(关于高版本能否兼容低版本,笔者还没试,在笔者验证后会与大家共享),我在这里下载了                      linux-2.6.29.4.tar.bz2。
     二、 在根目录下建立一个文件夹,叫linux-2.6.29.4,命令为“mkdir /linux-2.6.29.4”,用mv命令,将下载到的源码压缩包移动进去,用“tar -jxvf linux-2.6.29.4.tar.bz2”解压,此时,在 /linux-2.6.29.4/ linux-2.6.29.4/目录内存放的就是 linux-2.6.29.4的源码(记住这个路径,会在Makefile中用到)。
     三、对内核编译一次(关于内核的配置和编译这里就不提了,请查阅相关资料)。
     四、在用户目录下建立一个.c文件,笔者建立的是“vi /home/rhyme/C/hello.c”,此后会进入vi编辑界面,此时可以输入如下的c语言代码:
#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init()
{
        printk(KERN_ALERT "Hello,World!\n");
        return;
}
static void hello_exit()
{
        printk(KERN_ALERT "Goodbye World!\n");
}
module_init(hello_init);
module_exit(hello_init);
然后按“esc”后输入“:wq”退出。
      五、编写一个Makefile(注意与.c文件在同一个文件夹),“vi Makefile”,输入以下内容:
ifeq ($(KERNELRELEASE),)
      KERNELDIR ?=/linux-2.6.29.4/linux2.6.29.4                     #这个就是上述安放源码的路径#
      PWD :=$(shell pwd)
modules:
      &(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
      &(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
      rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c tmp_versions
else
      obj-m :=hello.o
endif
然后输入“esc”后输入“:wq”保存退出。
      六、.ko文件的编译。回到存放.c文件和Makefile文件的目录中,然后输入make命令进行编译,看到提示信息后代表编译完成 ,此时输入ls命令后会看到有个叫“hello.ko”的文件,此文件就是编译好的文件。
     七、若要加载此模块,必须切换成与编译的源码(笔者上文提及的“linux-2.6.29.4”)相同的内核(关于用高版本内核源码编译的文件能否在低版本的linux系统上运行,请等待笔者考证)。

捕获.JPG (26.25 KB, 下载次数: 16)

捕获.JPG
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP