【QCA】测试环境的module

0.项目结构&环境

1. 项目结构

./Makefile
./my_mod.c
./my_mod.ko //编译后产生

2. 环境

编译环境:
ubuntu 18.4,
toolchain:
toolchain-arm_cortex-a7_gcc-5.2.0_musl-1.1.16_eabi,
arm-openwrt-linux-xxx,
运行环境
高通IPQ6010,openwrt,32bit,linux-4.4,arm,

1. 源码简析

1. 头文件

#include <linux/init.h>
#include <linux/module.h>

2. 主体

2.1 my_mod.c

// 头文件
#include <linux/init.h>
#include <linux/module.h>

//加载时初始化函数
static int __init my_mod_init(void) 
{
    printk(">>> my_mod init <<<\n");
    return 0;
}

//退出时退出函数
static void __exit my_mod_exit(void)
{
    printk(">> my_mod exit <<<\n");
}

// 这是两个宏展开,简洁但不简单
module_init(my_mod_init);
module_exit(my_mod_exit);

// 开源协议、作者信息等等,
MODULE_LICENSE("GPL");		// 开源协议,不声明开源协议的话相关开源函数你没法用
//MODULE_LICENSE("GPL v2"); // 开源协议是有差距的,百度下以防万一
MODULE_AUTHOR("Liam@xxxx.com");

PS:以上头文件、初始化函数、退出函数、宏定义(或者展开)、开源协议都是基础部分。

2.2 Makefile

LIAM_ARCH=arm
LIAM_CROSS_COMPILE=/CCCC/toolchain-arm_cortex-a7_gcc-5.2.0_musl-1.1.16_eabi/bin/arm-openwrt-linux-

obj-m:=my_mod.o

PWD:=$(shell pwd)
KERNELDIR=/AAAA/qsdk/qca/src/linux-4.4/

.PHONY:all
all:
    @$(MAKE) ARCH=$(LIAM_ARCH) CROSS_COMPILE=$(LIAM_CROSS_COMPILE) -C $(KERNELDIR) M=$(PWD) modules
    @rm -rf .*.cmd *.o *.mod.c .tmp_versions *.order *symvers *Module.markers

.PHONY:clean
clean:
    rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions *.order *symvers *Module.markers

ps:
编译module需要定义这么几个数据:
ARCH:module运行的平台,arm arm64 x86 等等
CROSS_COMPILE : 交叉编译器的路径
KERNEDDIR:kernel源文件所在目录
make -C 与 M 参数建议百度。

2. 编译

编译环境:ubuntu18.4 , openwrt-gcc(32bit) ,

# cmd
/* 个人源码路径下输入 */
make  // 默认执行第一条编译命令
# log
/*
xxxxx$ make
make[1]: Entering directory '/AAAA/qsdk/qca/src/linux-4.4'
  CC [M]  /BBBB/my_mod.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /BBBB/my_mod.mod.o
  LD [M]  /BBBB/my_mod.ko
make[1]: Leaving directory '/AAAA/qsdk/qca/src/linux-4.4'
*/

注1:
AAAA 为kernel路径,
BBBB 为源码路径,
CCCC 为toolchain路径,
注2:
编译后产生.ko文件,EG:my_mod.ko

3. 加载、移除module

运行环境: 高通IPQ6010 , 32bit , linux-4.4 ,arm

# cmd : 加载module
//tftp 导入module到开发板/tmp/目录下
/* cd /tmp/;tftp -gr my_mod.ko 192.168.1.100 */
insmod ./my_mod.ko
# cmd :  移除module
rmmod my_mod
# log 
/*
root@OpenWrt:/# cd /tmp/
root@OpenWrt:/tmp# 
root@OpenWrt:/tmp# tftp -gr my_mod.ko 192.168.1.10
root@OpenWrt:/tmp# 
root@OpenWrt:/tmp# insmod ./my_mod.ko 
[  183.246098] >>> my_mod init <<<
root@OpenWrt:/tmp# 
root@OpenWrt:/tmp# 
root@OpenWrt:/tmp# rmmod my_mod
[  189.742962] >> my_mod exit <<<
root@OpenWrt:/tmp# 
*/

附录-源码文件

https://download.csdn.net/download/yujianliam/16773447

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过得精彩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值