ldd_hello_world

笔记

linux2.6之后将模块的后缀改为.ko,与.o相区分。同时在.ko中增加了.modinfo段,可以使用modinfo命令查看;

modinfo hello_world.ko

关于makefile,建议先阅读文档:linux/Documentation/kbuild/makefiles.txt

makefile:
#目标obj-m,将目标编译为模块
obj-m := hello_world.o

#定位kernel source目录
KDIR := /lib/modules/$(shell uname -r)/build

#当前目录
PWD := $(shell pwd)

#default
default:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

insmod与rmmod其实调用了内核中的module_initmodule_exit

linux中对设备的操作等同于对文件的操作,所有的设备文件在/dev/目录下

为了将文件与驱动链接起来,使用major number和minor number,major number用于linux kernel将驱动与驱动文件相连。 minor number 供驱动程序内部使用。

设备文件创建: mknod /dev/memory c 60 0
c:字符设备
60: major number
0: minor number

在驱动程序中,使用register_chrdev注册设备。
result = register_chrdev(memory_major, "memory", &memory_fops);

注销
result = unregister_chrdev(memory_major, "memory", &memory_fops);

modules 可以使用module_param()宏将参数声明为全局变量,可以通过命令行可这个变量赋值,达到命令行传参的目的。

如果内核模块由多个源文件组成,目标文件的编译与之前相同:
obj-m := modules.o

但是需要使用$(-y)指出其他所需文件:
modules-y := 1.o 2.o 3.o

make -C <linux_kernel_src_path> M=$PWD [target]

kbuild 通过 M=$PWD 了解这是在编译一个外部模块。 默认将要编译的模块存在于当前目录,因此[target]不必特别指出,同时所有的输出文件也都会在当前目录中创建。不要尝试更新内核源码,使用make成功编译内核是成功编译模块的前提。

转载于:https://www.cnblogs.com/tgcdz/p/6908387.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值