[LINUX]LINUX驱动开发最简环境搭建(适用于新手)
LINUX驱动开发环境搭建
- 一、 前言
- 二、系统环境
- Ubuntu
- VMWare{非必选}
- 三、开发环境搭建
- 1.用于简单学习(Header)
- 2.用于复杂驱动开发(源码树)
- a. 基本包
- b. 内核源码获取及编译
- 四、驱动开发简单示例【HelloWorld】
- 1. Linux C文件
- 2. Makefile文件
- 3. 驱动编译、加载及卸载
- 五、参考链接
- 六、写在最后的话【应该没有彩蛋】
- 彩蛋?
一、 前言
本文以流水账为记述方式,叙述了从零开始在Ubuntu系统环境下建立LINUX驱动开发环境的过程,并提供了简单的例子。目的是为了给新手或者其它需要建立LINUX驱动开发环境的技术人员或DIY爱好者提供一个简单明了的建立过程。
为减少误解,现提供本文的记述时间:【二〇二〇年初冬】。
二、系统环境
Ubuntu
下表为最近的三个版本Ubuntu的简介及下载链接,博主建议选取最新的LTS版本,这样在系统维护服务上会有保障。
系统版本 | 系统名称 | 发布时间 | 终止维护时间 | 官方推荐系统配置 |
---|---|---|---|---|
16.04.7(LTS) | Xenial Xerus | — | — | — |
18.04.5(LTS) | Bionic Beaver | — | — | — |
20.04.1(LTS) | Focal Fossa | — | April 2025 | CPU:2 GHz(双核);内存:4 GB;硬盘:25 GB |
注:上表中标明“—”的代表:“官网未标明,请自行搜索信息”
VMWare{非必选}
官方免费版下载地址或自行搜索免费版,关键字:VMware Workstation Player,或从这里下载。
Ubuntu虚拟机硬件配置
- 配置要求:根据使用需求,最低配置要求如下:
开发环境 | 最低配置 |
---|---|
简单学习开发环境 | 单核≥2GHz、内存≥2GB、硬盘空间≥20GB |
复杂驱动开发环境 | 单核≥2GHz、内存≥3GB、硬盘空间≥60GB |
- 其它要求:如有其它要求可自行尝试设置或自行搜索相关信息。
三、开发环境搭建
1.用于简单学习(Header)
如果仅需要简单的开发或者学习使用(如完成本文中HelloWorld驱动开发),则只需要安装以下基本工具:
sudo apt-get update
sudo apt-get install build-essential #获取基本开发工具,
2.用于复杂驱动开发(源码树)
可参见此链接做更详细的解答,下面仅列举主要步骤:
a. 基本包
深入开发Linux驱动,应选用以下代码构建环境(未标明尝试或非必须的就是一定要安装的)
sudo apt-get update
sudo apt-get install kernel-package #测试中会出现缺这缺那的情况,如以下包会丢失,如编译源码出现错误,可尝试执行
sudo apt-get install flex bison
#和/或
sudo apt-get install libssl-dev
#和/或
sudo apt-get install libelf-dev #libelf-devel or elfutils-libelf-devel
#如仍未解决,可自行搜索或尝试解决方案#编译生成menuconfig配置内核界面所需文件(非必须)
sudo apt-get install libncurses5-dev#开发版本管理及自动化包
sudo apt-get install automake#此处可能会有版本号
sudo apt-get install autoconf cvs subversion
b. 内核源码获取及编译
获取方式有两种:
- 从官网获取,获取后将解压后的
linux-source-<version>
文件夹放入/usr/src
中。 - 使用
apt
指令获取:
sudo apt-cache search linux-source
sudo apt-get install linux-source-<version>
#<version>为当前linux内核版本号,如当前为5.4.0,即将所有的<version>替换为5.4.0
#安装成功后会放在/usr/src中,文件名称 tar jxvf linux-source-<version>.tar.bz2
cd /usr/src/
sudo tar jxvf linux-source-<version>.tar.bz2
之后再编译源码
cd /usr/src/linux-source-<version>
#以下三选一
sudo make config #逐一选择kernel的配置形式
#或
sudo make oldconfig #按原有kernel配置配置kernel
#或
sudo make menuconfig #使用可视化环境配置kernel#编译内核的过程
sudo make #编译内核,时间较长,可能会长达1小时及以上,如5.4.0用时约3-5个小时
#此时已完成了镜像编译和所有modules编译,如果不确定可以使用以下指令再编译
sudo make modules #编译内核驱动modules
sudo make bzImage #编译内核镜像#加载modules的过程
sudo make modules_install #安装内核模块
#检查安装
cd /lib/modules
#如果安装正常这里面会出现以版本号为文件名的文件夹,就证明安装成功了,如5.4.xx或5.4.xx-xx-generic
至此内核编译完成。
四、驱动开发简单示例【HelloWorld】
使用命令在桌面新建一个hello
的文件夹,并新建hello.c
和Makefile
文件
mkdir ~/Desktop/hello
cd ~/Desktop/hello
touch hello.c Makefile
1. Linux C文件
在~/Desktop/hello
文件夹下,使用gedit hello.c
打开文件后,键入以下代码:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void)
{printk(KERN_ALERT "Hello, world\n"); //注意此处没有逗号分隔return 0;
}static void hello_exit(void)
{printk(KERN_ALERT "Goodbye, cruel world\n");//注意此处没有逗号分隔
}module_init(hello_init);
module_exit(hello_exit);
2. Makefile文件
在~/Desktop/hello
文件夹下,使用gedit Makefile
打开文件后,键入以下代码:
ifneq ($(KERNELRELEASE),) #注意此行开头顶格, ifneq和括号之间有一个空格obj-m:=hello.o #注意此行开头为一个空格
else #注意此行开头顶格KERNELDIR:=/lib/modules/$(shell uname -r)/build #注意此行开头为一个空格PWD:=$(shell pwd) #注意此行开头为一个空格
default: #注意此行开头顶格$(MAKE) -C $(kerneldir) M=$(PWD) modules #注意此行开头为Tab,Tab不能用空格替代!
endif #注意此行开头顶格
3. 驱动编译、加载及卸载
在~/Desktop/hello
文件夹下,使用以下代码编译驱动:
sudo make # in ~/Desktop/hello
使用以下代码加载驱动:
sudo insmod hello.ko # 加载hello.ko驱动
使用以下代码卸载驱动:
sudo rmmod hello #卸载hello驱动
使用以下代码查看驱动返回值:
dmesg |tail -5 #查看日志最后5行代码
总的测试过程如下:
#汇总过程为
sudo insmod hello.ko
sudo rmmod hello
dmesg |tail -5
#如无其他事件发生,在接连加载、卸载驱动hello.ko后,
#会在最后两行获取到返回值
#加载返回值:[<cpu_time>] hello: hello, world
#卸载返回值:[<cpu_time>] hello: Goodbye, cruel world
五、参考链接
感谢以下文章,不过单一的一篇文章并不能很好的兼容现有的安装,总会出现缺这缺那的情况,所以参考了许多的文章,主要链接写在下面:
- Linux源码树结构;
- 修改密码教程及获取root权限;
- vmware扩容教程1、vmware扩容教程2;
其中有有用的链接也列举如下。
- 相关链接1,BUG解决相关链接。
- 特别好的链接
其中还有一些解决bug的链接因为没有存储,所以这里也就没有给出,如果遇到相关的问题可以自行搜索~~~
六、写在最后的话【应该没有彩蛋】
确实建立这个环境挺折腾人的,比如说,学习第一个例程Helloworld的时候就直接N填编译失败而不知错在哪里,那种感觉真的是很崩溃,虽然这应该是一种技术摸索的常态,虽然经常碰见但仍会引起不适。
为了方便查阅,也是为了分享给米娜桑一点经验吧,少走弯路,避免进入上手即放手、入门即放弃的怪圈,要知道有时候技术自嗨起来[捂脸]还是很开心的~欢迎大家入技术之大坑。
彩蛋?
暂无
[LINUX]LINUX驱动开发最简环境搭建(适用于新手)相关推荐
- linux设备驱动开发之环境搭建(基于exynos4412)
第一章 linux设备驱动开发之环境搭建(基于exynos4412) 目录 第一章 linux设备驱动开发之环境搭建(基于exynos4412) 1.搭建开发板运行环境 1.1.交叉开发模式 安装交叉 ...
- 嵌入式 Linux 内核驱动开发【The first day: 36093万字】
嵌入式 Linux 内核驱动开发[1] 嵌入式 Linux 内核驱动开发前言 第1章 Linux 内核裁剪和定制 [1]Linux 内核开发简介 [2] Linux 源码阅读工具 [1.2.1]Sou ...
- Linux设备驱动开发基础
1.驱动概述和开发环境搭建 1.1驱动设备的作用 对设备驱动最通俗的解释就是"驱动硬件设备行动".驱动与底层硬件直接打交道,按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的 ...
- 正点原子linux驱动教程,正点原子 手把手教你学Linux之驱动开发篇
简 介 该课程是正点原子手把手教你学Linux系列课程,该课程配套开发板为正点原子alpha/mini Linux开发板. 手把手教你学Linux之驱动开发篇: 第1讲 Linux驱动开发与裸机开发区 ...
- Linux字符驱动开发学习总结
linux驱动编写(虚拟字符设备编写) 昨天我们说了一些简单模块编写方法,但是终归没有涉及到设备的编写内容,今天我们就可以了解一下相关方面的内容,并且用一个实例来说明在linux上面设备是如何编写的. ...
- linux设备驱动开发专业论坛www.linuxdriver.cn诚征斑竹
www.linuxdriver.cn诚征斑竹,一起繁荣Linux设备驱动开发专业论坛的人气,共同致力于提高中国工程师的Linux设备驱动开发水平,普及Linux设备驱动开发知识.[url]www.li ...
- 《Linux设备驱动开发详解》学习笔记一
Linux设备驱动开发详解学习笔记<一> 书名:<Linux设备驱动开发详解>第二版 主机环境:Linux version 2.6.25-14.fc9.i686@Fedora ...
- linux 设备驱动 ppt,linux设备驱动开发详解讲座ppt
PPT内容 这是linux设备驱动开发详解讲座ppt下载,主要介绍了设备驱动简介:建立和运行模块:字符驱动:调试技术:并发和竞争:分配内存:硬件通讯:中断处理:块设备驱动,欢迎点击下载. 嵌入式Lin ...
- 《Linux设备驱动开发详解(第2版)》隆重出版
Linux设备驱动开发详解(第2版)(前一版狂销3万册,畅销书最新升级) [新品] 点击看大图 基本信息 * 作者: 宋宝华 * 出版社:人民邮电出版社 * ISBN:97 ...
最新文章
- pl/sql中三种游标循环效率对比
- 新书上市 | 流行SQL引擎Presto,官方实战指南来了
- linux下mysql tmp满_MySQL服务器/tmp目录被占满
- pythonif有多个条件怎么办_Python中if有多个条件处理方法
- 天籁数学——数列篇(1)
- VTK:可视化之ShepardInterpolation
- 根据工作时间计算小组成员得分
- 图解,C语言希尔排序
- 构造函数、实例、原型对象、继承
- 西瓜书——极大似然估计和朴素贝叶斯
- diff测试与流量回放测试
- 解决C#程序只允许运行一个实例的几种方法详解
- Deepracer 学了就能云驾驭赛车? Deepracer机器学习进阶版干货分享!
- Python官方中文开发文档
- 兆骑科创平台创新创业赛事路演,投融资服务
- Java带宽限速器、Springboot限速器
- JAVA 支付宝支付_史诗级简单教程(SpringBoot)
- 短信业务 防恶意攻击解决方案
- oracle 结果集已耗尽_结果集已耗尽
- 【Planning】Firm type used in R3 Planning - Manual Firm and regular run
热门文章
- ASN.1编码格式介绍
- 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。 问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。 问第2个人,说比第一个人大两岁。 最后问第一个人,他说是10岁。请问
- 关于Authorware和文本格式
- 你知道吗,Nero也能当虚拟光驱使
- CSS布局 通栏平均分布型
- 常见浏览器扩展开发笔记(chrome firefox 360 baidu qq sougou liebao uc opera)
- 那英唱歌软件测试,是那英躺着唱《默》还是真唱?看到这个细节你就会知道!...
- 【Redis学习03】redis缓存及其更新策略
- 阿里云域名解析网络和服务架构设计(二) 之云解析DNS-全局流量管理
- ubuntu下安装摄像头