编译内核模块及交叉编译内核模块

理解了它就简单了,所以关键是理解.

编译内核模块,可以用两种方法.
1. 常规方法,通过make menuconfig 去设置对应的项,将功能编进内核或编成module.
2. 利用内核环境直接从模块源代码编出module
第一种方法菜单操作,不易出错.
第二种方法更简单,实质.可以理解模块的生成过程

下面以usb转串行口驱动的生成为例来说明.
将pl2303.c pl2303.h 源码copy到一个目录下,编写如下Makefile.
如果是本地编译更简单,如果是交叉编译则需要进交叉内核路径和传人交叉参数即可.
具体看注释就不解释了.

$(warning KERNELRELEASE = $(KERNELRELEASE))
ifneq ($(KERNELRELEASE),)
    obj-m := pl2303.o
else
    PWD=$(shell pwd)
    KVER=$(shell uname -r)

#编译x86_64模块时, 指定内核代码所在路径
#KDIR=/lib/modules/$(KVER)/build
#编译Arm 时,指定内核代码所在路径, 这个路径下,有编译内核的Makefile存在
KDIR=/home/hjj/M6G2C/04.源码示例/3.软件源码/linux-src


all:
    #编译x86_64, 简单的进入内核代码路径即可
    #make -C $(KDIR) M=$(PWD)
    #交叉编译arm, 我的环境需要指明ARCH, CROSS_COMPILE 变量
    make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
clean:
    rm *.o *.ko modules.* Module.symvers *.mod.c
endif


其它的模块生成也可以如此操作.
可见模块的编译是两次读取Makefile, 是用内核环境而不是普通环境编译的.

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值