1. 驱动章节实验环境搭建

您所在的位置:网站首页 虚拟机编译程序 1. 驱动章节实验环境搭建

1. 驱动章节实验环境搭建

2024-07-16 19:52:23| 来源: 网络整理| 查看: 265

1.4. 如何编译和加载内核驱动模块¶ 1.4.1. 编译内核驱动模块¶

内核模块加载到内核,可以将内核模块编译成单独的模块,在内核启动后由用户手动动态加载, 也可以将模块直接编译进内核,在内核启动时就自动加载。测试一般是单独编译成内核模块,然后手动加载,方便调试,同时也节省时间。

野火提供了驱动教程的源码,可以执行以下命令获取:

# 从github获取 git clone https://github.com/LubanCat/lubancat_rk_code_storage # 或者从gitee获取 git clone https://gitee.com/LubanCat/lubancat_rk_code_storage

获取到源码后,源码目录下的linux_driver文件夹就是存放驱动教程的例程文件,将其配套驱动程序代码放置到 内核代码同级目录 ,原因是编译内核模块时, 驱动程序需要依赖编译好的Linux内核,驱动模块中的Makefile中指定了内核的路径,为方便使用例程,请放至同一目录结构下。

内核驱动模块对象所需的构建步骤和编译很复杂,它利用了linux内核构建系统的强大功能, 目前我们还不需要深入了解这部分知识,利用简单的Make工具就能编译出我们想要的内核驱动模块。 这里以编译hellomodule内核模块为例,使用命令进入hellomodule目录,然后使用make:

cd linux_driver/module/hellomodule/ make

重要

Makefile中指定的目录 “KERNEL_DIR=../../../kernel/”要和实际编译内核时指定的输出目录一致,如果编译内核时没有指定特定输出目录,那么就将这个变量指定到内核源码的根目录,可以用绝对路径或者相对路径。 这里的环境是在PC上,使用交叉编译工具编译内核模块,在板卡上编译内核模块类似,使用板卡系统的gcc工具,Makefile不指定CROSS_COMPILE 、ARCH也可以。

切换到module/hellomodule目录下,直接执行make命令,即可编译程序。

Makefile(module/hellomodule/Makefile)¶ 1 2 3 4 5 6 7 8 9 10 11 12 13 14KERNEL_DIR=../../../kernel/ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- export ARCH CROSS_COMPILE obj-m := hellomodule.o all: $(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) modules .PHONE:clean clean: $(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) clean

第1行: 指定内核目录,根据自己编译内核时指定的输出目录,可以相对路径或者绝对路径,如果编译内核时没有指定特定输出目录,那么就将这个变量指定到内核源码的根目录。

第2行: arm64体系结构.

第3行: 指定交叉编译工具链,可以使用Lubancat-SDK的交叉编译工具gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu。

第4行: 导出环境变量。

第6行: 表示以模块进行编译。

第8行: all只是个标号,可以自行定义,是make的默认执行目标。

第9行: $(MAKE)的MAKE是Makefile中的宏变量,要引用宏变量要使用符号。这里实际上就是指向make程序,所以这里也可以把$(MAKE)换成make。 make -C是make命令的一个选项,-C作用是changedirectory, -C dir 就是转到dir目录。M=$(CURDIR):返回当前目录。这句话的意思是:当make执行默认的目标all时,-C(KVDIR)指明跳转到内核源码目录下去执行那里的Makefile,-C $(KERNEL_DIR)指明跳转到内核源码目录下去执行那里的Makefile,M=(CURDIR)表示又返回到当前目录来执行当前的Makefile。

第11行: clean 就是删除后面这些由make生成的文件。

在module/hellomodule/下,新增hellomodule.ko文件,这就是编译生成的内核驱动模块。

1.4.2. 加载内核驱动模块¶

编译好内核驱动模块,可以通过多种方式将hellomodule.ko拷贝到开发板,我们可以使用 NFS网络文件系统 、 scp命令 、 sftp命令 等。 其中NFS环境请搭建请参考Linux系列章节之 挂载NFS网络文件系统 章节。

scp 命令用于 Linux 之间复制文件和目录,该命令基于ssh,需要搭建好ssh环境,scp命令格式如下:

scp local_file remote_username@remote_ip:remote_folder

例如:

scp hellomodule.ko [email protected]:/home/cat/

将hellomodule.ko发送到192.168.103.129的/home/cat/目录下,192.168.103.129是开发板ip,需根据实际而定,开发板用户名为cat, 输入yes,然后输入密码进行验证,等待传输完成,这个时候我们开发板就有了hellomodule.ko 这个文件。如果是在开发板进行本地编译则不需要再进行传输。

安装卸载内核驱动模块使用insmod和rmmod命令:

#进入家目录 cd /home/cat/ # 加载内核模块 sudo insmod hellomodule.ko #查看当前加载的内核模块 lsmod # 卸载内核模块 sudo rmmod hellomodule.ko

查看加载的内核模块,可以使用命令lsmod,其他信息也可以到/sys/module目录下查看,例如:加载成功hellomodule.ko模块后, 可以到/sys/module/hellomodule下查看。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭