Linux交叉编译生成驱动模块.ko
编写了一个字符设备 chrdevbase.c ,在本机编译运行通过了,准备进行交叉编译,主要涉及makefile的编写
本机编译的makefile
先看下本机编译的makefile:
KERNELDIR := /lib/modules/4.15.0-189-generic/build
#本机编译使用/lib/modules/`uname -r`/buildCURRENT_PATH := $(shell pwd)#要生成的模块名
obj-m := chrdevbase.obuild: kernel_moduleskernel_modules:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
编译后查看下.ko,是x86-64架构
交叉编译的makefile
要进行交叉编译,首先要安装交叉编译工具链,这里不进行介绍了,我是直接安装了官方提供的预编译的toolchain。makefile如下
CROSS_COMPILE := aarch64-none-linux-gnu-
CC := $(CROSS_COMPILE)gcc
LD := $(CROSS_COMPILE)ldKERNELDIR := /home/wqs/Linux_SDK/rk3588/kernel
#交叉编译使用对应的Kernel源码目录CURRENT_PATH := $(shell pwd)
ARCH := arm64#要生成的模块名
obj-m := chrdevbase.obuild: kernel_moduleskernel_modules:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules ARCH=$(ARCH)
clean:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
- 需要指定交叉编译器 CROSS_COMPILE ,用到的 gcc 以及 ld 工具(见1~3行)
- KERNELDIR需要指定到使用的Linux内核目录(见第5行)
- 要指定内核架构,见17行的 ‘ARCH=$(ARCH)’
编译通过后查看一下.ko,可以看到产生了arm64架构的驱动
Linux交叉编译生成驱动模块.ko相关推荐
- kgdb调试linux内核以及驱动模块
kgdb调试linux内核以及驱动模块 本文将简要描述如何配置kgdb进行内核以及驱动模块调试,以嵌入式开发为例,但同样对于其他有需要调试kernel有一定的参考价值.本文实验环境为qemu搭建的ri ...
- Linux网卡模块,linux查看网卡驱动模块信息
linux查看网卡驱动模块信息 来源:互联网 作者:佚名 时间:2015-03-19 09:23 1.查看网卡使用的驱动[root@slavetwo~]#ethtool-iem1driver:tg3v ...
- linux 编译器制作,Linux交叉編譯器的制作(一)
Linux交叉編譯器的制作-buildroot 1.問題出現 編譯內核時,需要在PC機上進行編譯才能下載到開發板上去,但兩個平台不一樣,需要我們自己實現這個功能. [klaus@localhost l ...
- Linux驱动 | 加载.ko驱动模块的两种方法(insmod与modprobe)
文章目录 1.加载驱动模块 2.查看已加载的驱动模块列表 3.卸载驱动模块 假设要加载的驱动程序模块名为SHT21.ko 1.加载驱动模块 方法一 进入SHT21.ko驱动模块文件所在的目录,然后直接 ...
- Linux 单独编译驱动模块(ko文件)
0 背景 调试内核模块时,不想每次都要整个工程一起编译,只想编译单独的ko文件,也不影响模块间的依赖关系(会修改mod.depend信息). 1 确认必要的环境变量 创建env.sh文件,并chmod ...
- linux usb网卡驱动 ko,qf9700 USB网卡在x86 linux和arm linux上的驱动安装以及配置
最近要在一块老板子上面移植openwrt,需要扩展网口,于是选择了qf9700这款USB网卡,附赠的光盘里面有提供在linux下面安装的驱动源代码,所以我们要自己编译驱动源代码生成内核加载模块,加载模 ...
- linux rmmod :remove ‘xxx.ko‘ :Function not implemented
背景 如题,linux系统在使用rmmod卸载驱动模块时报错rmmod :remove 'xxx.ko' :Function not implemented 解决方案
- 出现使用选项-std=c99或-std=gnu99来编译您的代码错误或者如何让Linux内核编译驱动模块时支持C99
最近在Linux系统下编译嵌入式代码时出现问题: 问题如下图: 然后发现问题出在这: use option -std=c99 or -std=gnu99 to compile your code 上面 ...
- imx6ull的DMA实现的linux用户程序和驱动模块程序源码
本文是使用正点原子阿尔法IMX6ULL开发板作为硬件基础编写的用户应用程序和内核驱动程序. 实现了Linux内核中DMA引擎驱动模块的功能,用户程序测试通过. 程序的关键步骤: 1.一是使用内核驱动模 ...
最新文章
- 转载大神的 Linux查看物理CPU个数、核数、逻辑CPU个数
- linux命令用tar czvf .tar.gz好用的
- 北邮OJ 884. 16校赛-Average Modulo
- Python + OpenCV 太好玩了,可惜你可能还不会
- 单片机c语言 u16,单片机C语言的误用
- mybatis中的查询缓存
- 生产环境下,oracle不同用户间的数据迁移。第三部分
- 数组中其余的排除_带你一步步精通数组之十五:数组的计算规律之五
- SQL系统教程一(表之间的连接关系)
- 软件工程网络15个人阅读作业2(201521123010徐璐琳)
- mina mysql_Mina源码阅读笔记(四)—Mina的连接IoConnector2
- 四个好看的table表格样式
- r7 2700X装Linux,R7-2700X配什么主板?AMD锐龙7 2700X主板推荐 (全文)
- error occurred during initialization of VM报错解决
- 粒径20nm的金纳米粒Nafion-GOx-AuNPs对十二烷醇/葡萄糖氧化酶的标记过程
- 设置手机静音和固定电话来电时手机震动
- TCPIP之IP协议及IP地址详解
- xmind怎么导出为pdf?Xmind最全入门教程
- 利用jieba分词分析小说二
- pdf转换成txt转换器在线转换