驱动 day1 --内核的编译

news2024/11/17 3:08:29

1 内核编译:Makefile 

(1)下载linux源码 

        解压:sudo tar -xvf

(3)编译内容

条件编译:

        在内核的Makefile中,你可以通过检查.config文件中定义的配置宏来决定是否编译某个模块或文件

obj-$(CONFIG_LED) += xx1.o  
obj-$(CONFIG_XX2) += xx2.o  
obj-$(CONFIG_XX3) += xx3.o

        这里的关键是obj-变量。这个变量用于告诉make工具哪些源文件应该被编译成对象文件(.o),这取决于.config中相应的配置宏是否被设置为y(表示编译进内核)或m(表示编译为模块)。

  • 如果CONFIG_LED=y,则xx1.o会被编译进内核。
  • 如果CONFIG_XX2没有被设置为ym,则xx2.o不会被编译。
  • 同理,如果CONFIG_XX3=y,则xx3.o会被编译进内核。

(2)配置内核

make menuconfig
//可视化配置菜单

①先拷贝一个默认的配置到.config(官方认真的) vim .config --- 编译会直接编译

>②找到.config 所在目录> ③选择拷贝内容为->


->④进行配置(是否需要修改)make menuconfig

可视化配置:运行make menuconfig会启动一个基于文本的用户界面,允许你选择或更改内核的配置选项。
在这个界面中,你可以启用或禁用各种功能

(4)如果想编译uImage:

①此处的address 与point 不一样如果一样则需要修改:


②如果在编译中遇到此问题

        修改:

        进入将此行 注释#

②如果想实现需要将uImage 拷贝到 tftp目录下(chomd 777 uImage)

sudo minicom
tftp 0x30008000 uImage
bootm 30008000

 实现:


2 如何修改kconfig

(1)dirver/char 下kconfig

(2)

vim .config ->可以查看变化

(1)自己编写一个目录


 

进入上级目录  ---->

other关键字:

default:

depends:

select:

 3 实现.c文件的编译

/char 下 vim Makefile 里添加 OBJ-$(CONFIG_XXX) += XXX.o 

4 .练习

因为要实现驱动所以在  /drivers 下操作 

  • 编写一段简单的历程:编写 demoy.c
      1 #include<linux/init.h>
      2 static int __init demo_init(void)
      3 {
      4     return 0;
      5 }
      6 static void __exit demo_exit(void)
      7 {
      8 
      9 }
     10 
     11 module_init(demo_init);
     12 module_exit(demo_exit);
    



  •  



  •  



  •  



  •  
  • 想要实现注册 得要调用到相关函数

    #include<linux/kernel.h>



     
  • 将uimage 拷贝到 tytpboot下



     
  • sudo minicom
    tftp 0x30008000 uImage
    bootm 30008000

 实现:

5 . 驱使设备行动的程序编译

①删除交换文件 改变只读文件

②想要查看相关函数的头文件或者信息
Ctrl + } 相当于 man

(1)

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/kdev_t.h>
#include <linux/cdev.h>
#include <linux/module.h>

#define MAJOR_NUM 255
#define MINOR_NUM 0
#define DEV_NAME "demo"
#define DEV_NUM 1

int open (struct inode * inode, struct file * file)
{
	printk("demo open ...\n");
	return 0;
}

ssize_t read (struct file * file, char __user * buf, size_t len, loff_t * offset)
{
	printk("demo read ...\n");
	return 0;
}

ssize_t write (struct file * file, const char __user * buf, size_t len, loff_t * offset)
{
	printk("demo write ...\n");
	return 0;
}

int close (struct inode * inode, struct file * file)
{
	printk("demo close ...\n");
	return 0;
}

static struct file_operations fops = 
{
	.owner = THIS_MODULE,
	.open = open,
	.read = read,
	.write = write,
	.release = close
};
static struct cdev cdev;
static dev_t dev;

static int __init demo_init(void)
{
	dev = MKDEV(MAJOR_NUM, MINOR_NUM);

	cdev_init(&cdev, &fops);

	cdev_add(&cdev, dev, DEV_NUM);

	register_chrdev_region(dev, DEV_NUM, DEV_NAME);

	printk("demo_init  ###############################\n");

	return 0;
}

static void __exit demo_exit(void)
{
	unregister_chrdev_region(dev, DEV_NUM);
	cdev_del(&cdev);
	printk("demo_exit  ###############################\n");
}

module_init(demo_init);
module_exit(demo_exit);

(2)

 (3)

去找一个字符设备主设备号255 次设备号0 的链接节点 就可以找到 demoy_app 

 (4)再次编译就可以实现

在内核里实现了打印

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

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

相关文章

【计算机网络】名词解释--网络专有名词详解

在网络通信中&#xff0c;有许多专业术语和概念&#xff0c;它们共同构成了网络通信的基础。以下是一些常见的网络术语及其定义和相互之间的关系&#xff1a; 一、网络基础 1.1 电路交换&#xff1a;电路交换是一种在数据传输前建立专用通信路径的通信方式。在通信开始前&…

振动分析-21-从管道的刚性和柔性连接到设备的刚性和柔性支撑

刚性连接与柔性连接在管道连接方面的应用介绍。 1 管道的刚性连接 1.1 刚性连接的概念与特点 刚性连接指的是管道之间的连接点在受到外力时几乎不会发生位移或变形。刚性连接使管道各部分成为一个固定且坚固的整体,具有高强度和高稳定性,能够有效抵抗外力的作用。 刚性连…

WEB服务器-Nginx源码安装及相关配置

一、web服务概述 二、Nginx 概述 三、Nginx源码安装 直接下载压缩包到/home家目录进行操作 3.1 下载所需环境 dnf install gcc pcre-devel zlib-devel openssl-devel -y 源码安装需要提前准备标准的编译器&#xff0c;GCC的全称是&#xff08;GNU Compiler collection&#x…

HAProxy 概述及搭建群集

一、HAProxy概述 HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理&#xff0c;是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大&#xff08;并发达1w以上&#xff09;web站点&#xff0c;这些站点通常又需要会话保持或七层处理。HAProxy的运行模…

Cobalt Strike 4.8 用户指南-第三节-数据管理

3.1、概述 Cobalt Strike 团队服务器是行动期间 Cobalt Strike 收集的所有信息的中间商。Cobalt Strike 解析来自Beaconpayload 的输出&#xff0c;提取目标、服务和凭据。 如果想导出Cobalt Strike的数据&#xff0c;通过Reporting-->Export Data进行导出。Cobalt Strike…

DataX(Doris同步数据到SelectDB)

背景 由于之前的doris数仓在本地的服务器&#xff0c;当数据量越来越大&#xff0c;服务器的性能达不到要求&#xff0c;查询数据经常超时&#xff0c;故需要把本地的doris数仓部署到云上&#xff0c;本文以阿里云为例&#xff0c;迁移工具使用的阿里开源的datax。 datax官方文…

SpringBoot集成kafka开发-消息消费的分区策略(消费者如何判断从哪个分区中消费消息的?)

这里写目录标题 1、kafak消息者消费消息的4种分区策略2、kafka默认的消费分区策略1-RangeAssignor&#xff08;均匀分配、默认分配策略&#xff09;2.1、代码验证RangeAssignor的消息分区策略2.1.1、消费者2.1.2、生产者2.1.3、kafak配置类2.1.4、对象实体类2.1.5、项目配置文件…

LD3600F断路器LD3600F模块

LD3600F断路器LD3600F模块 LD3600F断路器LD3600F模块 LD3600F断路器LD3600F模块 LD3600F断路器LD3600F模块引脚线 LD3600F断路器LD3600F模块说明书 LD3600F断路器LD3600F模块接线图 LD3600F断路器是指能够关合、承载和开断正常回路条件下的电流并能在规定的时间内关合、承…

一款可以发送弹幕的播放器,快来看看

目录 介绍 一、基础使用 二、播放器配置 三、实现弹幕功能 四、总结 介绍 NPlayer是一款功能强大、响应式、可定制的播放器&#xff0c;基于TypeScript和Sass编写。NPlayer支持高定制&#xff0c;你可以轻松定制图标、主题颜色等&#xff0c;还可以集成插件&#xff0c;实…

C语言如何快速求值

题目&#xff1a;一个整数&#xff0c;它加上100后是一个完全平方数&#xff0c;再加上168又是一个完全平方数&#xff0c;请问该数是多少&#xff1f; 程序分析&#xff1a; 假设该数为 x。 1、则&#xff1a;x 100 n2, x 100 168 m2 2、计算等式&#xff1a;m2 - n2…

WPS 备注白条,演讲者模式看不到

问题描述&#xff1a; 演讲者模式的样子会变成白条&#xff0c;如&#xff1a; 解决方案&#xff1a; 清楚格式----清除备注的格式。因为之所以会出现这种情况&#xff0c;应该是备注变成了某种格式。 实现方式:

武汉流星汇聚:亚马逊跨境电商领航者,推动全球商业影响力新篇章

在全球化浪潮席卷而来的今天&#xff0c;跨境电商已成为推动世界经济一体化的重要力量&#xff0c;而亚马逊&#xff0c;作为这一领域的先驱与巨头&#xff0c;凭借其独特的商业模式、庞大的市场覆盖以及卓越的客户服务&#xff0c;在跨境电商市场中占据了举足轻重的地位。 亚…

28 支付服务Payment kit基本使用

新增订单(后续所有的操作都是基于订单) > 请求后端接口支付 携带订单id 请求后端支付接口(web组件的src)后端接受到请求后 会整合该笔订单所有信息 请求支付宝支付宝会返回一个该笔订单的支付链接由于我们使用的是web组件 这个支付链接会被打开 进入到支付流程支付完成后 支…

青龙面板本地部署流程结合内网穿透使用手机远程本地服务器薅羊毛

文章目录 前言一、前期准备本教程环境为&#xff1a;Centos7&#xff0c;可以跑Docker的系统都可以使用。本教程使用Docker部署青龙&#xff0c;如何安装Docker详见&#xff1a; 二、安装青龙面板三、映射本地部署的青龙面板至公网四、使用固定公网地址访问本地部署的青龙面板 …

NLP发展脉络-->特征优化阶段

NLP特征优化阶段 文本预处理特征提取降维与特征选择特征组合与扩展特征选择与评估特征工程的优化模型可解释性偏统计和规则的特征化阶段优缺点优点缺点 这是NLP的一个发展阶段。今天&#xff0c;我们就来了解一下NLP的特征优化阶段。特征优化在NLP的发展中曾经是一个至关重要的…

【案例58】WebSphere输出日志输出慢导致线程被阻塞

问题现象 系统非常卡顿 问题分析 分析javacore文件&#xff0c;寻找关键字&#xff0c;Flat locked by 3LKMONOBJECT org/apache/logging/log4j/core/appender/OutputStreamManager0x000000060FB6B3C0: Flat locked by "WebContainer : 3" (J9VMThread:0x0…

Ubuntu22.04安装深度学习的GPU环境详细教程(小白图文,显卡驱动、CUDA、cuDNN、PyTorch一步到位)

摘要&#xff1a;本博客详细介绍了如何在 Ubuntu 22.04 系统上安装和配置深度学习环境&#xff0c;包括 NVIDIA 驱动、CUDA Toolkit、cuDNN、Miniconda 及 PyTorch 等关键组件。文章从安装前的注意事项开始&#xff0c;逐步讲解了如何切换国内软件源以提升下载速度&#xff0c;…

【Android Studio】Webview 内核升级得三种方法(续)

【Android Studio】Webview 内核升级得三种方法&#xff08;续&#xff09; 前言对原理学习中对应的重点进行一个记录针对网页加载流量进行一个监控 前言 在之前的博文【Android Studio】Webview 内核升级得三种方法中&#xff0c;介绍了内核升级的三种方法&#xff0c;并提出…

ECCV2024|港中文提出文本生成3D方法DreamDissector,能够生成具有交互的多个独立对象。

DreamDissector 是一种文本生成3D对象的方法&#xff0c;通过将多对象文本生成的NeRF输入并生成独立的纹理网格&#xff0c;提供了对象级别的控制和多种应用可能性。 DreamDissector 可以生成具有合理交互的多个独立纹理网格&#xff0c;方便各种应用&#xff0c;包括对象级别的…

NFTScan | 08.19~08.25 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2024.08.19~ 2024.08.25 NFT Hot News 01/ CryptoPunk 5822 今日以未公开价格售出&#xff0c;曾在 2022 年以 8000 ETH 售出 8 月 19 日&#xff0c;据 nft now&#xff0c;CryptoPun…