Linux字符驱动--模块编译

模块编译

 

1、假设有如下的目录结构

Linux字符驱动--模块编译

其中driver中是模块的源码,linux-2.6.35-farsight中是已移植好了的linux内核源码,rootfs是通过nfs挂载的嵌入式根文件系统的目录

 

2、进入内核目录,内核按照正常的步骤进行配置(make menuconfig),执行内核映像文件的编译(make zImage)。注意:这两个步骤将内核进行了配置并自动生成了一些模块编译所使用的头文件

 

下面为可选

3、编译内核自身目录下的模块:make modules

4、安装内核自身目录下的模块:make INSTALL_MOD_PATH=../rootfs modules_install。其中“INSTALL_MOD_PATH=../rootfs”是nfs挂载的嵌入式根文件系统的目录相对于内核源码目录的位置,也可以用绝对路径,“INSTALL_MOD_PATH”这个变量需要按照实际的目录结构进行赋值。

5、执行了上述操作后,在nfs挂载的嵌入式根文件系统的目录会自动生成lib/modules/2.6.35/目录,并将内核自身编译出的模块和一些模块的依赖文件拷贝到该目录下

6、driver目录下编写模块的源文件和MakefileMakefile的模版如下:

#ifeq ($(KERNELRELEASE),)

 

PWD ?= $(shell pwd)

KERNELDIR ?= /home/kevin/Workspace/S5PC100/kernel/linux-2.6.35-farsight

INSTALLDIR ?= /home/kevin/Workspace/S5PC100/rootfs

 

modules:

       $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

modules_install:

       $(MAKE) -C $(KERNELDIR) M=$(PWD) INSTALL_MOD_PATH=$(INSTALLDIR) modules_install

clean:

       rm -rf *.o *.ko *.mod.* modules.order Module.symvers

.PHONY: modules modules_install clean

 

#else

 

obj-m := chardev.o

 

#endif

使用时只根据实际情况修改KERNELDIRINSTALLDIR两个变量和模块的文件名(即“obj-m :=”之后的名字)即可。其中KERNELDIR是内核源码树的目录,INSTALLDIRnfs挂载的嵌入式根文件系统的目录

7、进入到driver目录,执行make命令可以编译出本目录下的模块

8、进入到driver目录,执行make modules_install命令可以将本目录下的模块安装到nfs挂载的嵌入式根文件系统的目录的lib/modules/2.6.35/extra/目录下

9、以上操作都是在PC机上进行的

 

10、在嵌入式linux系统的终端中执行“depmod”命令,可以解决模块的一些依赖关系

11、在嵌入式linux系统的终端中执行“modprobe xxx(xxx是模块的名字)命令,可以自动装载相应的模块,并自动解决依赖,把依赖的模块一同装载

12、在嵌入式linux系统的终端中执行“rmmod xxx(xxx是模块的名字)命令,可以卸载模块,但是如果模块正在被使用,卸载将会不成功

 

驱动支持多个设备
Linux字符驱动--模块编译

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值