Linux内核驱动入门 编译环境搭建、编译内核

文章目录

  • 前言
  • 搭建内核驱动编译环境
    • 下载交叉编译工具
    • 编译内核
      • minicom工具使用
      • 找不到ttyUSB设备问题
      • 编译内核
      • 编译报错解决
      • 小坑
      • 编译选项说明
  • 从零开始的驱动程序

前言

哎…有时候我都不知道自己是干啥的
说是运维吧,docker不会,k8s不会;说是驱动吧,uboot不熟,内核不熟,驱动没写过;
什么都是会点皮毛,这篇文章记录一下内核驱动学习记录。
(背景:用的正点原子的开发板)

搭建内核驱动编译环境

下载交叉编译工具

编译内核

minicom工具使用

我的i7-1260p性能真的巨差啊,windows上开了个6核12GB内存的虚拟机编译qemu的arm一项就要11分钟,(双系统)切到ubuntu后,同样的操作只需要1分多种,所以我用物理机搭环境了,win那边开虚拟机性能差的受不了。
这就需要安装一下linux上的串口工具,这里我用的是minicom

minicom -D /dev/ttyUSB0 -b 115200
alias minicom-a="minicom -D /dev/ttyUSB0 -b 115200" #下次输minicom-a就可以了
ctrl+A 然后 z进入菜单
按x或q退出

在这里插入图片描述

找不到ttyUSB设备问题

用正点原子那个板子连到电脑上的USB口,是有个啥ch340驱动转的,ubuntu自带这个玩意,设备文件应该叫ttyUSB*,但是我一开始在/dev下找不到,原因是冲突了,参考了下面这篇博客
【物联网】Ubuntu2204版本不显示USB串口设备解决办法
结论 ubuntu上需要卸载brltty,(这是个什么盲文的啥,放心apt remove brltty就行)然后重新给板子上下电

编译内核

正点原子给的linux内核源码,这个东西没法上传,上传了也要积分下载,大家自己买块板子或者网上找下吧
在这里插入图片描述

注:和普通的linux4.1.15代码不一样,可能是做了什么32位的适配
执行make help查看编译选项:
有imx_v7_defconfig和imx_v7_mfg_defconfig两项,正点的PDF教程里推荐使用mfg那个,但那个编出来的是armv6版本的,蚌
所以这里执行make imx_v7_defconfig
然后make Image -j12(i7-1260P是4P+8E 12个物理核,所以我启了12个线程)
等待内核编译完成:

编译报错解决

刚开始编译就报错:multiple definition of `yylloc’; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
百度了一下发现是gcc版本太高,降级到gcc9
这里顺便记录一下update-alternatives工具的使用

#1 创建链接
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 3
为/usr/bin/gcc-9创建一个管理的软链接
到/usr/bin/gcc
名称为gcc
优先级是3#2 更改优先级
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 5
覆盖原先的优先级为5#3 手动选择
update-alternatives --config gcc 弹出>>2 个候选项可用于替换 gcc (提供 /usr/bin/gcc)。选择       路径           优先级  状态
------------------------------------------------------------0            /usr/bin/gcc-9    5         自动模式
* 1            /usr/bin/gcc-11   2         手动模式2            /usr/bin/gcc-9    5         手动模式输入编号选择#4 删除链接
update-alternatives --remove gcc /usr/bin/gcc-9

小坑

这里有个小坑
正点的板子的内核似乎是编译的某个chekout的代码,但是他给的压缩包可就不是git仓了,因此编译出来版本号可能对不上:
在这里插入图片描述g3dc0a4b:这个是git的checkout的某次提交(应该…吧
更改内核Makefile
EXTRAVERSION填这个

在这里插入图片描述

编译选项说明

nnd 当初学内核编译的时候,网上的那些教程总是讲不清Image zImage uImage Image.gz vmlinux这些东西,烦死了
这里我简单说一下:
首先 执行make help,可以查看linux内核Makefile支持的编译选项
然后 就可以看到支持的选项:

在这里插入图片描述
这里支持zImage Image uImage,但其他内核源码不一定支持uImage,有的则是Image.gz,至于这些的区别大家网上查查吧,编译驱动弄个基础的Image就行

从零开始的驱动程序

arcoproc.c

#include<linux/init.h>
#include<linux/module.h>
#include<linux/kernel.h>static int __init arcoproc_init(void) {printk("arcoproc init~\n");return 0;
}static void __exit arcoproc_exit(void) {printk("arco say: bye~\n");
}module_init(arcoproc_init);
module_exit(arcoproc_exit);MODULE_LICENSE("GPL");
MODULE_AUTHOR("ARCO");
MODULE_DESCRIPTION("arco proc test");

Makefile
这里的KDIR指定的是刚才编译出的内核的位置

KDIR := /home/arco/kernel/linux-imx
obj-m=arcoproc.o
PWD=$(shell pwd)
all:make -C $(KDIR) M=$(PWD) modules
clean:make -C $(KDIR) M=$(PWD) clean

下一篇:
Linux内核驱动入门 proc文件读写
编写了一个简单的内核驱动程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/27214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【安卓】在安卓中使用HTTP协议的最佳实践

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

领夹无线麦克风哪个品牌好?分享麦克风什么牌子的音质比较好!

​无线领夹麦克风作为现代音频技术的杰出代表&#xff0c;正逐渐改变着我们的声音表达方式。它以其独特的便携性、稳定性和高音质&#xff0c;成为了众多声音创作者的首选工具。面对市场上琳琅满目的无线领夹麦克风选项&#xff0c;找到一款贴合个人需求的设备无疑是一项挑战。…

Python发票合同 | 解缠注意力语言模型

&#x1f3af;要点 &#x1f3af;语言学、儿童发展、数学、常识推理、生物学、物理学、社会偏见、软件开发基准评估语言模型 | &#x1f3af;解缠注意力模型 | &#x1f3af;语言模型行为测试 | &#x1f3af;知识图谱关联信息提取模型 | &#x1f3af;多标签和多模态数据点分…

万字长文爆肝Spring(一)

Spring_day01 今日目标 掌握Spring相关概念完成IOC/DI的入门案例编写掌握IOC的相关配置与使用掌握DI的相关配置与使用 1&#xff0c;课程介绍 对于一门新技术&#xff0c;我们需要从为什么要学、学什么以及怎么学这三个方向入手来学习。那对于Spring来说: 1.1 为什么要学? …

金融科技助力绿色金融:可持续发展新动力

随着全球气候变化和环境问题的日益严重&#xff0c;绿色金融作为推动环境保护和经济可持续发展的重要手段&#xff0c;已经受到越来越多的关注。而金融科技&#xff0c;作为科技与金融深度融合的产物&#xff0c;正以其独特的优势为绿色金融的发展注入新动力。本文将探讨金融科…

insert into select 迁移数据,可以嘛?

1 事情的起因 公司的交易量比较大&#xff0c;使用的数据库是mysql&#xff0c;每天的增量差不多在百万左右&#xff0c;公司并没有分库分表&#xff0c;所以想维持这个表的性能只能考虑做数据迁移。 同事李某接到了这个任务&#xff0c;于是他想出了这两个方案 先通过程序查…

Vue 路由:一级路由,嵌套路由

1、安装路由插件,因为用的是vue2 所以路由版本要和vue2对应上&#xff0c;所有有3 yarn add vue-router3 2、在main.js里引入 import VueRouter from vue-router Vue.use(VueRouter) 3、新建文件夹 router,创建index.js 4、引入路由插件&#xff0c;并且暴露出来这个路由 5、在…

在 JavaScript 中,如何给js对象增加新的属性和值

在 JavaScript 中&#xff0c;如何给js对象增加新的属性和值&#xff0c;可以使用点符号&#xff08;.&#xff09;和方括号符号&#xff08;[]&#xff09;&#xff0c;但是他们的用法有一些关键的区别&#xff0c;具体如下&#xff1a; 点符号. 点符号用来添加对象的属性&a…

基于机器学习的C-MAPSS涡扇发动机RUL预测

美国国家航空航天局的商用模块化航空推进仿真系统&#xff08;CMAPSS&#xff09;所模拟出的涡扇发动机性能退化数据进行实验验证&#xff0c;数据中包含有风扇、涡轮、压气机等组件参数。C-MAPSS中所包含的数据集可以模拟出从海平面到42千英尺的高度&#xff0c;从0到0.9马赫的…

一键实现电脑投屏到电视机,轻松享受更大画面

在数字化的今天&#xff0c;我们常常希望在更大的屏幕上分享电脑上的内容&#xff0c;观看视频、展示演示文稿&#xff0c;或者与家人一同欣赏照片。而实现电脑屏幕投射到电视机上&#xff0c;成为了许多人追求的方便而实用的功能。本文将为您详细介绍电脑投屏到电视机的方法&a…

汽车IVI中控开发入门及进阶(二十六):视频解码芯片ADV7180

前言: ADV7180芯片的功能框图如下: ADV7180自动检测并将兼容全球NTSC、PAL和SECAM标准的标准模拟基带电视信号转换为兼容8位ITU-R BT.656接口标准的4:2:2分量视频数据。简单的数字输出接口与各种MPEG编码器、编解码器、移动视频处理器以及Analog Devices数字视频编码器(如A…

跨平台看抖音、哔哩哔哩、虎牙、斗鱼啦,一个app即可完成

一、简介 1、一款免费、开源、无广告、跨平台的,可以观看抖音、哔哩哔哩、虎牙、斗鱼等平台的直播内容的软件。它简单好用,支持 Windows、MacOS、Linux、Android、iOS 等平台。 二、下载 1、文末有下载链接,apk手机可直接安装,不明白可以私聊我哈(麻烦咚咚咚,动动小手给个…

浮动与弹性的区别

弹性与浮动在Web页面布局中有着不同的概念和应用&#xff0c;以下是它们之间的主要区别&#xff1a; 定义与应用领域&#xff1a; 弹性&#xff1a;在物理学和机械学上&#xff0c;弹性描述的是物体在外力作用下发生形变&#xff0c;并在外力撤除后恢复原来大小和形状的性质。…

C++ 字符串处理3-实现starts_with和ends_with的字符串判断功能

1. 关键词2. C20及之后3. C20之前 3.1. strutil.h3.2. strutil.cpp3.3. 测试代码3.4. 运行结果3.5. 源码地址 1. 关键词 C 字符串处理 starts_with ends_with std::string 跨平台 2. C20及之后 C20标准开始&#xff0c;STL已经提供了starts_with和ends_with函数&#xff0…

Matrix->Matrix工具类获取Matrix的平移、缩放、错切数值

// 传入矩阵&#xff0c;获取矩阵数值 class MatrixValues(matrix: Matrix) {val scaleX: Floatval scaleY: Floatval transX: Floatval transY: Floatval skewX : Float val skewY : Floatinit {val fromValues FloatArray(9)matrix.getValues(fromValues)// 缩放数值scaleX …

【PythonGIS】基于Arcpy修改mxd版本

我们在使用ArcGIS时有时候保存或别人发过来的mxd工程文件会打不开&#xff0c;大概率是因为mxd保存的版本不一样&#xff0c;ArcGIS可以使用高版本打开低版本保存的mxd&#xff0c;反之则不行&#xff0c;所以今天给大家分享一下如何修改mxd版本。 原创作者&#xff1a;RS迷途小…

有什么好用的ai智能写作手机版?6个软件帮助你快速进行智能写作

有什么好用的ai智能写作手机版&#xff1f;6个软件帮助你快速进行智能写作 AI智能写作在现代社会中扮演着越来越重要的角色&#xff0c;许多人依赖这些工具来提高写作效率和质量。以下是六款不同类型的AI智能写作手机应用&#xff0c;它们可以帮助你快速进行智能写作&#xff…

十种排序方法

目录 1.冒泡排序&#xff08;Bubble Sort&#xff09;代码实现 2.选择排序&#xff08;Selection Sort&#xff09;代码实现 3.插入排序&#xff08;Insertion Sort&#xff09; 4.希尔排序&#xff08;Shell Sort&#xff09;代码实现 5.快速排序&#xff08;Quick Sort&…

element 表格el-table的 :cell-style用法-表格固定行文字高亮

el-table的 :cell-style用法 实现表格固定行文字高亮效果 <el-tableref"table"borderstripe:data"list":height"height"highlight-current-row:cell-style"cellStyle"><el-table-columnprop"code"label"规则…

扩展学习|高校风险管理研究综述

文献来源&#xff1a;[1]高娟.高校风险管理研究综述[J].财会通讯&#xff1a;上, 2015(6):4.DOI:CNKI: SUN:CKTX.0.2015-16-012. 文章简介&#xff1a;基于对高校风险研究的梳理&#xff0c;纵观现有研究成果&#xff0c;高校风险管理研 究已逐步体现理论基础多学科化、研究流派…