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;找到一款贴合个人需求的设备无疑是一项挑战。…

万字长文爆肝Spring(一)

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

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

随着全球气候变化和环境问题的日益严重&#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、在…

基于机器学习的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手机可直接安装,不明白可以私聊我哈(麻烦咚咚咚,动动小手给个…

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 …

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

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

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"规则…

2024年【陕西省安全员C证】考试资料及陕西省安全员C证考试总结

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 陕西省安全员C证考试资料根据新陕西省安全员C证考试大纲要求&#xff0c;安全生产模拟考试一点通将陕西省安全员C证模拟考试试题进行汇编&#xff0c;组成一套陕西省安全员C证全真模拟考试试题&#xff0c;学员可通过…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 团队派遣(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍓OJ题目截图 📎在线评测链接 团队派遣(100分) 🌍 评测功能需要订阅专栏…

Python第二语言(十一、Python面向对象(下))

目录 1. 封装 1.1 私有成员&#xff1a;__成员、__成员方法 2. 继承&#xff1a;单继承、多继承 2.1 继承的基础语法 2.2 复写 & 子类使用父类成员 3. 变量的类型注解&#xff1a;给变量标识变量类型 3.1 为什么需要类型注解 3.2 类型注解 3.3 类型注解的语法 3.…

怎么把Rmvb改成mp4格式?把rmvb改成MP4格式的四种方法

怎么把Rmvb改成mp4格式&#xff1f;在当今的数字时代&#xff0c;视频文件格式的多样性给我们带来了巨大的便利&#xff0c;但也可能带来一些兼容性的问题。rmvb是一种曾经非常流行的视频文件格式&#xff0c;主要由于其较高的压缩效率和相对不错的画质。然而&#xff0c;随着技…

Java:112-SpringMVC的底层原理(下篇)

这里继续续写上一章博客&#xff08;111章博客&#xff09;&#xff1a; Spring MVC 源码深度剖析&#xff1a; 既然我们自行写出了一个&#xff0c;那么我们可以选择看看mvc源码&#xff1a; 前端控制器 DispatcherServlet 继承结构&#xff1a; 前面我们知道mvc是操作同…

【后端开发】服务开发场景之高可用(冗余设计,服务限流,降级熔断,超时重试,性能测试)

【后端开发】服务开发场景之高可用&#xff08;冗余设计&#xff0c;服务限流&#xff0c;降级熔断&#xff0c;超时重试&#xff0c;性能测试&#xff09; 文章目录 序&#xff1a;如何设计一个高可用的系统&#xff1f;可用性的判断指标是什么&#xff1f;哪些情况会导致系统…

陪诊小程序开发,陪诊师在线接单

近几年&#xff0c;陪诊师成为了一个新兴行业&#xff0c;在科技时代中&#xff0c;陪诊小程序作为互联网下的产物&#xff0c;为陪诊市场带来了更多的便利。 当下生活压力大&#xff0c;老龄化逐渐严重&#xff0c;年轻人很难做到陪同家属看病。此外&#xff0c;就诊中出现了…

!力扣46. 全排列

给定一个不含重复数字的数组 nums &#xff0c;返回其所有可能的全排列 。你可以按任意顺序返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2&#xff1a; 输入&#xff1a;nu…