linux驱动开发环境搭建

news2024/10/7 14:25:16

使用的是parallel 创建的ubuntu 16.04 ubuntu20.04虚拟机

源码准备

# 先查看本机版本
$ uname -r
5.15.0-86-generic

# 搜索相关源码
$ sudo apt-cache search linux-source
[sudo] password for showme:
linux-source - Linux kernel source with Ubuntu patches
linux-source-5.4.0 - Linux kernel source for version 5.4.0 with Ubuntu patches
linux-gkeop-source-5.4.0 - Linux kernel source for version 5.4.0 with Ubuntu patches
linux-hwe-5.11-source-5.11.0 - Linux kernel source for version 5.11.0 with Ubuntu patches
linux-hwe-5.13-source-5.13.0 - Linux kernel source for version 5.13.0 with Ubuntu patches
linux-hwe-5.15-source-5.15.0 - Linux kernel source for version 5.15.0 with Ubuntu patches
linux-hwe-5.8-source-5.8.0 - Linux kernel source for version 5.8.0 with Ubuntu patches
linux-intel-5.13-source-5.13.0 - Linux kernel source for version 5.13.0 with Ubuntu patches

# 下载源码,源码会下载到/usr/src目录下
$ sudo apt install linux-source-5.4.0

showme@showme:/usr/src/linux-source-5.4.0$ ls -l
total 131816
drwxr-xr-x 15 root root      4096 1031 03:28 debian
drwxr-xr-x  9 root root      4096 1031 03:28 debian.master
-rw-r--r--  1 root root 134966876 103 02:13 linux-source-5.4.0.tar.bz2

# 复制linux-source-5.4.0.tar.bz2,编译两份,一份用于内核安装,一份用于clion驱动开发代码提示
# 用于内核安装的,会编译很多驱动,用clion打开会很卡,需要大概16G内存,才能不卡
# 用于开发环境的,编译会很快,用clion打开也会很快,代码提示时,也不会卡

安装编译依赖

# 安装所需要依赖的库
sudo apt-get install libncurses5-dev gcc make bc g++ vim git bc flex bison libssl-dev dwarves libelf-dev automake autoconf cvs subversion ruby
# 安装 bear 用于clion打开内核源码
sudo apt install bear
# 下载kernel-grok用于clion打开内核源码
git clone https://github.com/habemus-papadum/kernel-grok

编译内核

在编译的时候把虚拟机分配8核,8G内存,开发的时候2核,4G内存就够了

编译用于clion打开的内核

# 解压linux-source-5.4.0.tar.bz2源码,进入到linux-source-5.4.0目录
# 配置
make menuconfig

# 修改配置文件 .config
# 搜索debian关键字,如果存在如下内容
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
# 将其清空
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""

# 使用bear编译内核,只生成bzImage和vmlinux编译很快
bear make bzImage vmlinux -j16

# 生成内核源码的 CMakeLists.txt,需要进入内核源码目录下,执行
~/kernel-grok/generate_cmake

# clion打开 CMakeLists.txt ,并添加如下内容
cmake_minimum_required(VERSION 2.8.8)
project(kernel)

set(SYSROOT sysroot)
SET(CMAKE_C_COMPILER "gcc")
set(CMAKE_C_STANDARD 90)
set(CMAKE_C_FLAGS  ${CMAKE_C_FLAGS} " --sysroot=${SYSROOT}" )

include_directories("include")
include_directories("include/uapi")
include_directories("include/generated")
include_directories("arch/x86/include")
include_directories("arch/x86/include/uapi")
include_directories("arch/x86/include/generated")
include_directories("arch/x86/include/generated/uapi")

add_definitions(-D__KERNEL__)

编译用于安装的内核

# 解压linux-source-5.4.0.tar.bz2源码,进入到linux-source-5.4.0目录
sudo make oldconfig #按原有kernel配置配置kernel
sudo make #编译内核,时间较长,可能会长达1小时及以上,如5.4.0用时约3-5个小时
sudo make modules_install #安装内核模块
sudo make install # 安装内核

在这里插入图片描述

参考

https://blog.csdn.net/inf4inf/article/details/110272531
https://blog.csdn.net/yaoxinJJJ/article/details/115433638
https://zhuanlan.zhihu.com/p/409007775?utm_id=0

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

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

相关文章

【Kubernetes 基本概念】Kubernetes 的架构和核心概念

目录 一、Kurbernetes1.1 简介1.2 为什么要用K8s?1.3 K8s的特性 二、Kurbernetes集群架构与组件三、Kurbernetes的核心组件3.1 Master组件3.1.1 Kube-apiserver3.1.2 Kube-controller-manager3.1.3 Kube-scheduler 3.2 配置存储中心——etcd3.3 Node组件3.3.1 Kubelet3.3.2 Ku…

qnx resource managers 实例

文章目录 前言一、resource managers 是什么二、device resource managers 实例1. Single-threaded device resource manager2.Multithreaded device resource manager3.Resource Managers that Handle Multiple Devices总结参考资料前言 本文主要介绍如何编写一个 qnx 下 的 …

CSS图片下方4px间距

目录 1,问题表现2,问题解决 1,问题表现 .test-img {height: 100px;outline: 1px solid salmon; }图片下方有4px间距。 图片下方是图片时问题也存在。 2,问题解决 图片设置 display: block;图片设置 vertical-align: middle; …

【Java 进阶篇】深入理解 Java Response:从基础到高级

HTTP响应(Response)是Web开发中的一个关键概念,它是服务器向客户端(通常是浏览器)返回数据的方式。理解如何在Java中处理和构建HTTP响应是开发Web应用程序的重要一部分。本文将从基础知识到高级技巧,详细介…

Python---判定表法(功能测试)

能对多条件依赖关系进行设计测试点---判定表法 等价类、边界值分析法主要关注单个输入类条件的测试 定义:是一种以表格形式表达多条件逻辑判断的工具。 条件桩: 列出问题中的所有条件,列出条件的次序无关紧要动作桩: 列出问题中可能采取的操作,操作的…

安装最新版vue-cli,并搭建一个vue2项目

安装最新版vue-cli,并搭建一个vue2项目 卸载旧版本环境 卸载node.js 可以使用qq电脑管家,找到nodejs卸载即可 cmd查看vue cli版本(可以看到我们是vue cli 2.x) C:\Users\youzhengjie666> vue -V 2.9.6卸载vue cli 2.x np…

学习笔记|单样本t检验|无统计学意义|规范表达|《小白爱上SPSS》课程:SPSS第四讲 | 单样本T检验怎么做?很单纯很简单!

目录 学习目的软件版本原始文档一、实战案例二、案例解析本案例之目的 四、SPSS操作1、正态性检验Tips:无统计学意义 2、t检验结果 五、结果解读六、规范报告1、规范表格2、规范文字 注意划重点 学习目的 SPSS第四讲 | 单样本T检验怎么做?很单纯很简单&…

Python爬取读书网的图片链接和书名并保存在数据库中

一个比较基础且常见的爬虫,写下来用于记录和巩固相关知识。 一、前置条件 本项目采用scrapy框架进行爬取,需要提前安装 pip install scrapy# 国内镜像 pip install scrapy -i https://pypi.douban.com/simple 由于需要保存数据到数据库,因…

CCLINK IEFB转Profinet协议网关连接1200和三菱FX5U的通讯方法

捷米JM-PN-CCLKIE这款网关主要功能是实现CCLINK IEFB总线和PROFINET网络的数据互通。 JM-PN-CCLKIE网关连接到PROFINET总线中做为从站使用,连接到CCLINK IEFB总线中做为从站使用。该产品主要功能是实现CCLINK IEFB总线和PROFINET网络的数据互通。JM-PN-CCLKIE网关分…

PyQt5:构建目标检测算法GUI界面 (附python代码)

文章目录 1.界面2.代码3.Analyze 1.界面 目标检测算法一般就是检测个图片,然后显示图片结果。 最简单的情况,我们需要一个按钮读取图片,然后后有一个地方显示图片。 2.代码 import sys import numpy as np from PIL import Imagefrom PyQt…

问题 C: 搬寝室(DP)

算法分析: 题目意思为求n个物品,拿k对使得消耗的体力最少, 或者说是这k对物品,每一对中两件物品的质量差平方最小, 所以要使得质量差的平方小,只能排序后取质量相邻两个物品作为一对; 现在设f…

Leetcode刷题笔记--Hot91--100

1--汉明距离&#xff08;461&#xff09; 主要思路&#xff1a; 按位异或&#xff0c;统计1的个数&#xff1b; #include <iostream> #include <vector>class Solution { public:int hammingDistance(int x, int y) {int z x ^ y; // 按位异或int res 0;while(…

行情分析——加密货币市场大盘走势(10.31)

目前大饼依然在33000-36000这个位置震荡&#xff0c;需要等待指标修复&#xff0c;策略就是逢低做多&#xff0c;做短线。最近白天下跌&#xff0c;晚上涨回来&#xff0c;可以小仓位入场多单&#xff0c;晚上离场下车。 以太同样是震荡行情&#xff0c;看下来以太目前在补涨&a…

virtual 关键字中 cv限定符的使用

对于如下定义&#xff1a; struct A { virtual int f( ) { return 1; } } a; struct B: A {int f( ) const { return 2; }int f( ) volatile { return 3; }int f( ) const volatile { return 4; } } c; int main(int argc, char *argv[ ]) { A *p&c; return p->f( ); } …

公共字段自动填充、菜品管理

一、公共字段填充 1.1、问题分析 1.2、实现思路 1.3、代码开发 1.3.1、自定义注解 import com.sky.enumeration.OperationType;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import jav…

88 每日温度

每日温度 理解为什么用栈&#xff1a;一种在连续数据里的局部关系&#xff0c;这道题体现在temp[0]只和第一个比它大的值下标有关题解1 逆波兰栈改进(单调栈) 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 a…

【代码随想录03】哈希总结

哈希算法总结&#xff0c;拿去吧&#xff01;留下个赞

1-1 暴力破解-枚举

枚举&#xff1a;枚举所有的情况&#xff0c;逐个判断是否是问题的解 判断题目是否可以使用枚举&#xff1a;估算算法复杂度 1秒计算机大约能处理107的数据量&#xff0c;即O(n)107&#xff0c;则O(n2)能处理的数据量就是根号107≈3162 复杂度对应的数据量是该算法能处理的最…

SpringBoot2.7.17整合redis7

需要的依赖库&#xff1a; <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</gro…

0基础学习PyFlink——个数滑动窗口(Sliding Count Windows)

大纲 滑动&#xff08;Sliding&#xff09;和滚动&#xff08;Tumbling&#xff09;的区别样例窗口为2&#xff0c;滑动距离为1窗口为3&#xff0c;滑动距离为1窗口为3&#xff0c;滑动距离为2窗口为3&#xff0c;滑动距离为3 完整代码参考资料 在 《0基础学习PyFlink——个数…