嵌入式学习——硬件(Linux内核编程)——day58

news2024/11/17 14:33:15

1. linux内核

1.1 定义

        Linux内核本质上是一个复杂的程序。它是操作系统中最核心的部分,直接与计算机硬件交互并管理系统资源。尽管内核是一个程序,但它不同于一般的应用程序。它运行在系统的最高权限级别,直接控制硬件并为其他软件提供基础服务。Linux内核是开源的,意味着任何人都可以查看、修改和分发其源代码。

1. 2 作用

  1. 进程管理:创建、调度和终止进程。
  2. 内存管理:分配和回收内存,管理虚拟内存。
  3. 文件系统管理:提供文件系统的接口,管理文件的读写操作。
  4. 设备驱动:控制和管理硬件设备。
  5. 网络管理:处理网络通信和数据传输。
  6. 系统安全和权限管理:管理用户和进程的权限,确保系统安全。

2. NFS

2.1 定义

        NFS(Network File System,网络文件系统)是一种分布式文件系统协议,最早由Sun Microsystems在1984年开发。它允许不同计算机系统之间通过网络共享文件,并使得客户端计算机能够像访问本地文件系统一样访问远程文件系统。

2.2 作用

  1. 文件共享

    • 跨平台共享:NFS允许不同操作系统(如Unix、Linux、Windows)之间共享文件,使得不同平台的用户可以访问相同的文件资源。
    • 集中化管理:通过NFS,企业可以集中管理文件和数据,减少数据冗余,提升数据一致性。
  2. 简化数据访问

    • 透明访问:用户可以像访问本地文件一样访问NFS共享的文件,无需关心文件实际存储在哪台服务器上。
    • 灵活性:NFS支持动态挂载和卸载文件系统,使得数据访问更加灵活和便捷。
  3. 资源利用优化

    • 存储整合:通过NFS,多个客户端可以共享同一个存储资源,提高存储利用率,减少存储浪费。
    • 负载分担:NFS服务器可以分散多个客户端的访问请求,减轻单个服务器的负载压力,提高系统整体性能。
  4. 支持异构网络

    • 跨网络访问:NFS支持局域网(LAN)和广域网(WAN),用户可以在不同地理位置的网络环境下访问共享文件。
  5. 高可用性和容错性

    • 数据备份:NFS服务器可以配置数据备份策略,确保数据安全和高可用性。
    • 容错机制:通过配置冗余服务器,NFS可以提供容错能力,当一个服务器发生故障时,客户端可以切换到备用服务器继续工作。
  6. 安全性

    • 访问控制:NFS支持基于用户和组的访问控制列表(ACL),可以精细化管理文件和目录的访问权限。
    • 数据加密:在传输过程中可以通过加密协议(如Kerberos)保护数据安全,防止未经授权的访问和数据窃取。

3. Icache和Dcache

        ICACHE(Instruction Cache)和DCACHE(Data Cache)是计算机体系结构中的两种缓存类型,它们分别用于存储指令和数据,旨在提高处理器访问存储器的效率。

  1. ICACHE(指令缓存)

    • 作用:ICACHE用于存储处理器执行的指令(代码段)。
    • 优势:由于程序的执行通常会重复执行某些指令,将这些指令存储在ICACHE中可以减少处理器访问主存的频率,从而加快程序的执行速度。
    • 结构:ICACHE通常由高速的SRAM(Static Random Access Memory)构成,它与处理器的速度相匹配,能够快速响应处理器的访问请求。
  2. DCACHE(数据缓存)

    • 作用:DCACHE用于存储处理器需要访问的数据。
    • 优势:与ICACHE类似,DCACHE可以存储最常用的数据,减少处理器访问主存的时间,提高程序的执行效率。
    • 结构:DCACHE也通常采用SRAM构建,速度较快,但其大小可能比ICACHE更大,因为数据通常比指令占用更多的内存空间。

在现代计算机系统中,ICACHE和DCACHE通常是处理器内部的一部分,它们通过缓存预取(cache prefetching)和替换策略(cache replacement policies)来优化缓存的命中率,以最大限度地提高系统的性能和响应速度。

4. TFTP

4.1 定义

        TFTP(Trivial File Transfer Protocol)是一种简单的文件传输协议,主要用于在网络设备之间传输文件。

4.2 功能

        通过TFTP将文件从服务器下载到客户端

5. makefile

5.1 普通文件

target = app
OBJS = main.o fun.o

%.c:%.o
    gcc -c $^ -o $@

$(target):$(OBJS)
    gcc -o$@ $^

clean:
    rm $(target) $(OBJS)

5.2 产生驱动

KERNELDIR := /home/linux/s3c2440/linux-2.6.32.2/
CURRENT_PATH := $(shell pwd)
obj-m := first_driver.o

build: kernel_modules

kernel_modules:
	$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
	$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean

6. 

8. 字符驱动程序(open、close、write、read)

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

int first_driver_open(struct inode *p_node, struct file *fp)
{
	printk("open\n");
	return 0;
}

ssize_t first_driver_read(struct file *fp, char __user *user_buffer, size_t n, loff_t * offset)
{
	printk("read\n");
	return 0;
}

ssize_t first_driver_write(struct file *fp, const char __user *user_buffer, size_t n, loff_t *offset)
{
	printk("write\n");
	return 0;
}

int first_driver_close(struct inode *p_node, struct file *fp)
{
	printk("close\n");
	return 0;
}

struct file_operations fops =
{	
	.owner = THIS_MODULE,		//注册函数中的结构体变量
	.release = first_driver_close,
	.open = first_driver_open,
	.read = first_driver_read,
	.write = first_driver_write,
};

static int __init first_driver_init(void)//初始化
{	
	int ret;
	printk("init\n");
	ret = register_chrdev(200, "first driver", &fops);//注册
	if(ret != 0)
	{
		return ret;
	}
	return 0;
}

static void __exit first_driver_exit(void)//销毁
{
	unregister_chrdev(200, "first driver");//销毁
	printk("exot\n");
}

module_init(first_driver_init);
module_exit(first_driver_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("PuTe");


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

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

相关文章

场景管理分析平台介绍

在数字化浪潮的推动下&#xff0c;数据已成为企业决策的重要依据。特别是在智能驾驶、虚拟现实和物联网等领域&#xff0c;场景数据的高效管理和利用至关重要。在智能驾驶领域面对海量的场景数据&#xff0c;如何高效处理、精准分析&#xff0c;并将其转化为有价值的决策支持&a…

Go语言--递归函数

递归函数 递归指所数可以直接或问接的调用自身。递归函数通常有相同的结构:一个跳出条件和一个递归体。所谓跳出条件就是根据传入的参数判断是否需要停止递归&#xff0c;而递归体则是函数自身所做的一些处理。 普通函数的调用流程 递归函数调用流程 一定要写终止条件。 实现…

C语言刷题小记1

前言 本篇博客和大家分享一些C语言的OJ题目&#xff0c;希望大家可以通过这些题目进一步提升自己的编程能力&#xff0c;如果你对本篇内容感兴趣&#xff0c;可以一键三连&#xff0c;多多关注&#xff0c;下面进入正文部分。 题目1 十六进制转十进制 描述 BoBo写了一个十六…

JS(JavaScript) 数据校验 正则表达式

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

什么?2024年只要 HTML 和 CSS 就可以实现一个自适应的瀑布流页面了?

瀑布流页面布局&#xff0c;故名思义就是页面上的元素子项像瀑布一样进行上下紧凑布局&#xff0c;一般图片类网站、电商类或者博客类的网站经常会使用这种布局&#xff0c;使得展示的元素比较紧凑和丰富&#xff0c; 类似下图 这里总结一下瀑布流布局主要有以下特征&#xff1…

java生成json格式文件(包含缩进等格式)

生成json文件的同时保留原json格式&#xff0c;拥有良好的格式&#xff08;如缩进等&#xff09;&#xff0c;提供友善阅读支持。 pom.xml依赖增加&#xff1a; <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactI…

物联网综合实验平台-物联网实验实训教学平台-物联网实验箱

物联网&#xff08;IoT&#xff09;是一种连接性技术&#xff0c;将各种设备和物品连接到互联网&#xff0c;通过数据的收集和分析实现更智能的决策和操作。在《“十四五”数字经济发展规划》中&#xff0c;物联网被明确提出&#xff0c;被视为数字经济时代的基础设施。当前&am…

基于循环神经网络的一维信号降噪方法(简单版本,Python)

代码非常简单。 import torch import torch.nn as nn from torch.autograd import Variable from scipy.io.wavfile import write #need install pydub module #pip install pydub import numpy as np import pydub from scipy import signal import IPython import matplot…

NAT地址转换实验,实验超简单

实验拓扑 实验目的 将内网区域&#xff08;灰色区域&#xff09;的地址转换为172.16.1.0 实验过程 配置静态NAT&#xff08;基于接口的静态NAT&#xff09; R1配置 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sysname R1 [R1]un in en I…

LoadRunner-Virtual User Generator组件学习(录制不上内容)

重点知识 LR工具是拿C写的&#xff0c;所以它的脚本默认也是C&#xff0c;但是最终生成的脚本不止是C&#xff0c;它是支持C和Java语言的&#xff0c;这个大家要清楚&#xff0c;对本身懂代码的就很友好&#xff0c;你了解java&#xff0c;那就可以把脚本改成java&#xff0c;…

第十二章 Nest中 Express 和 Fastify

Express是一个用于构建Web应用程序和API的JavaScript框架。它是基于Node.js平台的&#xff0c;并提供了一系列简化了常见Web开发任务的功能&#xff0c;如路由、中间件、模板引擎和数据库集成等。 是一个处理请求、响应的库 其可以通过use一个个中间件来处理请求和返回响应&…

随手记录: Ubuntu NVIDIA显卡驱动安装后 屏幕亮度无法调节 无法连接外显示器等问题

背景 一句话&#xff1a;简单记录帮身边人装系统发现 GPU和外接显示器的无法连接&#xff0c;同时亮度无法调节等新问题 设备型号&#xff1a; 联想笔记本&#xff1a;ThinkBook 16p Gen2CPU&#xff1a;AMD Ryzen 7 5800HGPU&#xff1a;RTX 3060 问题描述及流程&#xff…

深度学习标注文件格式转换

json转xml 原始数据集文件夹中图片格式为bmp&#xff0c;标注文件为json&#xff0c;图片和标注文件放在同一个文件夹下面&#xff0c;将json转为xml格式&#xff0c;图片和标注文件分别存放在一个文件夹下面。 headstr """\ <annotation><folder>…

【CSS in Depth 2 精译】2.4 视口的相对单位

当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位 ✔️2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 2.4 视口的相对单位 前面介绍过的 em 和 rem 是相对于 font-size 定义的&#xff0…

React+TS前台项目实战(二十四)-- 全局常用绘制组件Qrcode封装

文章目录 前言Qrcode组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示(pc端 / 移动端) 总结 前言 今天要封装的Qrcode 组件&#xff0c;是通过传入的信息&#xff0c;绘制在二维码上&#xff0c;可用于很多场景&#xff0c;如区块链项目中的区块显示交易地址时就可以用到…

DDOS攻击不懂?看完让你秒懂!

什么是DDOS攻击&#xff1f; DDoS攻击&#xff0c;全称分布式拒绝服务攻击&#xff08;Distributed Denial of Service attack&#xff09;&#xff0c;是一种常见的网络安全攻击方式。以下是对DDoS攻击的详细解释: DDoS攻击是指攻击者利用大量被控制的计算机或设备&#xff…

Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)

1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现。由于时间的关系&#xff0c;宏哥这里用代码给小伙伴演示两个模块&#xff1a;注册和登录。 2.业务模块封装 因为现在各种APP的层出不群&#xff0c;各式各样的。但是其大多数都有注册、登录。为…

嵌入式Linux之Uboot简介和移植

uboot简介 uboot 的全称是 Universal Boot Loader&#xff0c;uboot 是一个遵循 GPL 协议的开源软件&#xff0c;uboot是一个裸机代码&#xff0c;可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。 也就是说&#xff0c;可以在没有系统的情况…

vue如何实现低代码

Vue.js 本身作为一个前端框架&#xff0c;并不是专门设计用来实现低代码平台的工具。然而&#xff0c;借助 Vue.js 的灵活性和组件化特性&#xff0c;可以在其基础上构建低代码平台或低代码工具。以下是一些实现低代码平台所需的关键功能和技术&#xff0c;可以在 Vue.js 中进行…

使用ChatGPT自动生成测试用例思维导图

使用ChatGPT自动生成测试用例思维导图 引言ChatGPT在测试用例编写中的应用全面覆盖测试场景边界测试避免测试用例重复 借助ChatGPT生成测试用例思维导图准备工作步骤一&#xff1a;与ChatGPT对话步骤二&#xff1a;生成思维导图代码 结语 引言 在编写测试用例时&#xff0c;测…