linux kernel
文章平均质量分 74
linux kernel
代码改变世界ctw
12年手机安全、汽车安全、芯片安全开发经验。擅长Trustzone/TEE/安全的设计与开发。作有《Armv8/Armv9架构从入门到精通》、《Trustzone/TEE/安全快速入门班》、《Secureboot从入门到精通 训练营》等课程。
展开
-
Linux内核驱动面试-百问百答
基础理论01-什么是Linux内核与用户空间有何区别02-Linux内核的主要功能有哪些03-内核模块是什么它们是如何工作的04-描述内核空间和用户空间之间的通信机制05-什么是系统调用请给出几个例子06-如何查看当前系统的内核版本07-解释Linux内核的模块化是如何实现的08-什么是设备树它在Linux内核中扮演什么角色设备驱动09-设备驱动程序的作用是什么10-字符设备和块设备有什么区别11-描述创建一个简单字符设备驱动的步骤12-如何向Linux内核添加新的设备驱动13-原创 2024-06-23 15:27:15 · 786 阅读 · 0 评论 -
13-解释设备驱动中的udev系统
udev是Linux系统中重要的设备管理框架,提供了动态设备节点管理、设备命名规则、设备属性管理和事件处理功能。它通过配置文件定义规则,自动处理设备的创建、删除和属性设置,简化了设备管理和自动化操作的实现。原创 2024-06-23 18:01:21 · 539 阅读 · 0 评论 -
14-如何处理设备的热插拔
Linux内核处理设备的热插拔(即设备在运行中的动态插入和拔出)涉及多个组件和机制,确保设备在插入或拔出时能正确识别和处理。原创 2024-06-23 18:02:57 · 935 阅读 · 0 评论 -
15-描述设备树中的设备如何与驱动匹配
在Linux内核中,设备树(Device Tree)是一种描述硬件的方式,尤其在嵌入式系统和ARM架构中被广泛使用。设备树使用一种名为设备树源(Device Tree Source, DTS)的语法来描述系统的硬件布局,包括设备和它们的属性。内核使用设备树来了解系统中存在的硬件,并相应地加载和配置驱动程序。原创 2024-06-23 18:04:17 · 709 阅读 · 0 评论 -
16-什么是直接内存访问(DMA)?? 它在设备驱动中的作用是什么?
DMA是提高数据传输效率和减少CPU负载的重要技术。通过允许外设直接与系统内存进行数据交换,DMA使得大规模数据传输变得高效和快速。在设备驱动程序中,使用DMA技术可以显著提升系统性能,特别是在需要处理大量数据的应用中。原创 2024-06-23 18:07:18 · 1005 阅读 · 0 评论 -
12-如何向Linux内核添加新的设备驱动
向Linux内核添加新的设备驱动通常涉及以下几个步骤:编写驱动程序代码、配置和编译内核、安装和加载驱动程序以及测试驱动程序。下面是详细的步骤:b. 定义必要的数据结构和变量c. 实现设备文件操作函数d. 定义文件操作结构体2. 初始化和清理模块a. 初始化模块b. 清理模块3. 模块信息4. 编写Makefile编写一个Makefile来编译内核模块。5. 编译和测试驱动程序a. 编译驱动程序在终端中运行命令编译内核模块。b. 加载驱动程序使用命令加载编译好的内核模块原创 2024-06-23 17:54:41 · 763 阅读 · 0 评论 -
11-描述创建一个简单字符设备驱动的步骤
定义设备号、字符设备结构体等。将实现的操作函数与文件操作结构体关联起来。原创 2024-06-23 17:52:01 · 371 阅读 · 0 评论 -
10-字符设备和块设备有什么区别
数据访问方式:字符设备以字节流方式读写数据,而块设备以固定大小的块方式读写数据。应用场景:字符设备适合于需要逐个字符处理的设备,如终端设备;块设备适合于需要高效随机访问和大量数据处理的设备,如硬盘驱动器。性能特征:块设备通常有更好的性能,因为它们可以进行块级别的缓存和预读取操作,而字符设备则更适合于实时交互和逐字节处理。设备驱动实现:设备驱动程序的实现在处理字符设备和块设备时有所不同,尤其是在数据缓冲、错误处理和性能优化方面。原创 2024-06-23 15:52:04 · 748 阅读 · 0 评论 -
09-设备驱动程序的作用是什么
设备驱动程序在计算机系统中扮演着至关重要的角色,其主要作用是使操作系统能够管理和控制硬件设备。原创 2024-06-23 15:51:11 · 365 阅读 · 0 评论 -
08-什么是设备树?它在Linux内核中扮演什么角色
设备树(Device Tree)是一种描述硬件平台及其组件的数据结构和规范。它以一种结构化的方式描述了系统中的各种硬件设备、总线、中断控制器以及它们之间的连接关系。设备树的目的是为了在不同的硬件平台上实现操作系统的可移植性和灵活性。原创 2024-06-23 15:49:23 · 785 阅读 · 0 评论 -
07-解释Linux内核的模块化是如何实现的
Linux内核的模块化指的是将不同功能和驱动程序分离成独立的模块,这些模块可以在运行时动态加载到内核中,也可以在不需要时动态卸载,而无需重新编译整个内核。这种设计使得Linux内核可以根据需要灵活地扩展和管理功能,同时保持内核的精简和性能。原创 2024-06-23 15:48:29 · 532 阅读 · 0 评论 -
06-如何查看当前系统的内核版本
命令用于显示系统启动时的信息,包括内核版本号。这表明当前系统正在使用的是 Linux 内核的 5.4.0 版本。命令用于显示系统信息,包括内核版本。通过以上任一方法,你可以轻松地查看当前系统的内核版本信息。文件来获取内核版本信息。目录下通常会有存储有关内核的文件,例如。这会显示包括内核版本在内的完整内核信息。这将输出当前系统正在运行的内核版本号。这将输出系统启动时记录的内核版本信息。文件可以了解内核编译时的配置,而。部分则是当前正在使用的内核版本。Linux系统中,可以通过读取。原创 2024-06-23 15:46:49 · 300 阅读 · 0 评论 -
05-什么是系统调用?请给出几个例子
系统调用(System Call)是操作系统内核提供给用户空间程序的接口,用于让用户空间程序请求操作系统内核执行某些特权操作或访问硬件资源。用户空间程序通常无法直接访问硬件设备或执行特权操作,必须通过系统调用来完成这些任务。原创 2024-06-23 15:45:57 · 474 阅读 · 0 评论 -
03-内核模块是什么它们是如何工作的
内核模块(Kernel Module)是可以在运行时动态加载或卸载的代码段,它们扩展了Linux内核的功能,而无需重新编译或重启内核。内核模块常用于实现设备驱动程序、文件系统、网络协议以及其他系统功能。原创 2024-06-23 15:43:45 · 478 阅读 · 0 评论 -
02-Linux内核的主要功能有哪些
通过这些功能,Linux内核为操作系统的稳定、安全、高效运行提供了坚实的基础,支持各种应用程序和服务的运行。原创 2024-06-23 15:42:02 · 637 阅读 · 0 评论 -
01-Linux内核与用户空间有何区别?
内核空间:负责资源管理、硬件抽象、系统调用接口、安全与稳定性,运行权限高,直接与硬件交互。用户空间:运行各种应用程序,提供库和服务,与用户交互,运行权限低,程序间相互隔离。通过这种分离,Linux系统能够实现高效、稳定、安全的运行,同时允许用户灵活地开发和使用各种应用程序。原创 2024-06-23 15:39:48 · 860 阅读 · 0 评论 -
Linux内核驱动面试的100问
- 什么是Linux内核?与用户空间有何区别?- Linux内核的主要功能有哪些?- 内核模块是什么?它们是如何工作的?- 描述内核空间和用户空间之间的通信机制。- 什么是系统调用?请给出几个例子。- 如何查看当前系统的内核版本?- 解释Linux内核的模块化是如何实现的。- 什么是设备树?它在Linux内核中扮演什么角色?原创 2024-02-23 07:53:33 · 1449 阅读 · 0 评论 -
Linux Kernel的local_irq_enable()和local_irq_disable()函数
代码如下图所示,最终操作的是。原创 2023-08-19 08:26:59 · 397 阅读 · 0 评论 -
Linux Kernel信息
Linux Kernel 5.9.0, 大概有58181个源文件原创 2021-02-26 12:56:05 · 57 阅读 · 0 评论 -
LUKS磁盘加密
LUKS (Linux Unified Key Setup)是 Linux 硬盘加密的标准。 通过提供标准的磁盘格式,它不仅可以促进发行版之间的兼容性,还可以提供对多个用户密码的安全管理。 与现有解决方案相比,LUKS 将所有必要的设置信息存储在分区信息首部中,使用户能够无缝传输或迁移其数据。原创 2023-06-14 20:56:43 · 621 阅读 · 0 评论 -
强制给CPU调频/定频的方法
强制给CPU调频/定频的方法。原创 2023-01-28 07:08:56 · 989 阅读 · 0 评论 -
Kernel的编译
例如,编译一个5.10 ffa版本的kernel。例如,编译一个6.1版本的kernel。原创 2022-10-25 23:41:24 · 393 阅读 · 0 评论 -
ftrace的使用方法
ftrace原创 2022-10-22 14:51:15 · 246 阅读 · 0 评论 -
执行make menuconfig后编译Linux内核出现Restart config问题
在编译内核时,指定好配置时指定的架构和编译器,make 对应的镜像即可。在配置内核时, 指定好对应的架构和编译器, 在配置完成以后save。原因:出现以上问题时,一般是配置内核时,没有指定好架构和编译器。原创 2022-10-22 14:04:41 · 798 阅读 · 0 评论 -
cryptocell学习笔记
在Linux Kernel中开启CONFIG_CRYPTO_DEV_CCREE宏控即可, 代码路径如下:ATF中,开启ARM_CRYPTOCELL_INTEG := 0即可原创 2022-01-14 20:11:54 · 470 阅读 · 0 评论 -
Linux Kernel中非对称密码算法的实现
RSA的实现由CONFIG_CRYPTO_RSA 宏控制,该宏依赖于:CONFIG_CRYPTO_AKCIPHERCONFIG_CRYPTO_MANAGERCONFIG_MPILIBCONFIG_ASN1(linux/crypto/Kconfig)config CRYPTO_RSA tristate "RSA algorithm" select CRYPTO_AKCIPHER select CRYPTO_MANAGER select MPILIB select ASN1 hel原创 2022-05-08 15:07:05 · 1864 阅读 · 0 评论 -
一文了解Linux Kernel中密码学算法的设计与应用
1、Linux Kernel中支持哪些密码学算法?分别都是怎么实现的?哪些是C语言实现?哪些是Neon指令实现?哪些是ARM Cryptography Extension硬件实现? 这些不同的实现方式,他们之间的关系是怎样的? 并列关系?多选一?多选多?2、应用程序的密码学算法一般又是怎样实现的?应用程序的密码学算法实现,是否依赖Kernel底层的密码学算法?3、应用程序是如何调用到Kernel底层的密码学算法? Kernel底层的其它模块,如何调用密码学算法?4、如何在Kernel底层增加一种密码学原创 2022-05-08 00:00:49 · 2270 阅读 · 0 评论 -
Linux内核编码风格
Linux内核编码风格这是一个简短的文档,描述了 linux 内核的首选编码风格。编码风格是很个人的,我不会逼上任何人我的看法,但是这所讲述的东西,我必须能够维持,并且我也希望它对于大多数其他的一些东西。请至少考虑这里提出的观点。首先,我建议打印一份 GNU 编码标准的副本,而不是阅读它。烧掉它们,这是一个伟大的象征性姿态。无论如何,这里是:缩进制表符是 8 个字符,因此缩进也是 8 个字符。有一些异端运动试图使缩进 4(甚至 2!)个字符深,这类似于试图将 PI 的值定义为 3。基本原理:原创 2021-12-26 13:35:38 · 1155 阅读 · 0 评论 -
Linux Kernel5.10的软中断(softirq)的本质
Linux Kernel的中断的底半部分实现有三种,分别是:软中断tasklet工作队列软中断软中断的本质是什么?其实就是在硬件中断(也叫中断顶半部分)执行完毕后,通过wakeup_softirqd()的方式唤醒一个softirq队列,然后中断程序返回,softirq队列也在适当的时候开始执行。irq_handler —> gic_handle_irq() —> handle_domain_irq() —> __handle_domain_irq() —>原创 2022-02-28 23:40:40 · 939 阅读 · 0 评论 -
Linux Kernel5.10的核间通信(SGI中断)的本质
核间中断概念处理器间中断就是一个 CPU 向系统中的目标 CPU发送中断信号,以使目标CPU执行特定的操作在Linux Kernel操作系统中,默认定义了8中IPI中断(SGI0-SGI7)(linux/arch/arm64/kernel/smp.c)enum ipi_msg_type { IPI_RESCHEDULE, IPI_CALL_FUNC, IPI_CPU_STOP, IPI_CPU_CRASH_STOP, IPI_TIMER, IPI_IRQ_WORK, IPI_WAKE原创 2022-02-28 20:53:22 · 4152 阅读 · 0 评论 -
irq domain介绍和代码导读
创建一个irq domain,注意是tree型的(linux/drivers/irqchip/irq-gic-v3.c)static int __init gic_init_bases(void __iomem *dist_base, struct redist_region *rdist_regs, u32 nr_redist_regions, u64 redist_stride, struct fwnode_handle *handle)...... g原创 2022-02-28 10:57:11 · 703 阅读 · 0 评论 -
思考:Linux Kernel的中断处理函数中是否会被其它程序(中断/异常)打断?
先说结论1、当一个irq/fiq正在执行时 ,是否可能会其它的irq/fiq打断呢?如果开启了中断优先级,则在irq/fiq进入的时候,也会再次enalbe irq/fiq,即也就是支持了中断嵌套。所以此时一个irq或fiq正在执行的时候,它是有可能被另外一个高优先级的irq/fiq num的中断抢占的。但是很遗憾,在我们的Linux Kernel系统中,至今都没有默认开启中断优先级,在一进入irq/fiq的时候,也没有再次enable irq/fiq. 所以这种情况下,一个正在执行的irq/原创 2022-02-28 09:51:46 · 1663 阅读 · 2 评论 -
Linux Kernel中local_irq_enable()和local_irq_disable()的实现
local_irq_enable()和local_irq_disable()的实现,其实就是操作的DAIF寄存器(PSTATE), 命令分别是msr daifclr, #3 //enablemsr daifset, #3 //disable(1)、 local_irq_disable()(linux/include/linux/irqflags.h)#define local_irq_disable() do { raw_local_irq_disable(); } while (0)原创 2022-02-28 09:24:38 · 1109 阅读 · 0 评论 -
02-Linux Kernel(armv8-aarch64)的原子操作的底层实现
通常我们代码中的a = a + 1这样的一行语句,翻译成汇编后蕴含着3条指令:ldr x0, &aadd x0,x0,#1str x0,&a即(1)从内存中读取a变量到X0寄存器(2)X0寄存器加1(3)将X0写入到内存a中既然是3条指令,那么就有可能并发,也就意味着返回的结果可能不说预期的。然后在linux kernel的操作系统中,提供访问原子变量的函数,用来解决上述问题。其中部分原子操作的API如下:atomic_readatomic_add_retur原创 2022-02-27 16:08:54 · 1880 阅读 · 0 评论 -
Linux Kernel中的同步机制的介绍
1、信号量特点:允许多个进程同时进入临界区,但大多数情况下只允许一个,即技术设置为1,这种又称之为二值信号量(互斥信号量)信号量适合保护较长的临界区,因为竞争信号量时进程可睡眠,进程切换的代价很高。(linux/include/linux/semaphore.h)/* Please don't access any members of this structure directly */struct semaphore { raw_spinlock_t lock; unsigned.原创 2022-02-27 14:52:48 · 1400 阅读 · 0 评论 -
printk格式说明符-查表
If variable is of Type, use printk format specifier:------------------------------------------------------------ char %d or %x unsigned char %u or %x short int %d or %x uns原创 2021-12-24 23:58:06 · 632 阅读 · 0 评论 -
在Linux Kernel中有没有定义和实现FIQ向量
★★★ 个人博客导读首页—点击此处 ★★★.说明:在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 5.14先说答案:NO,或者说定义了FIQ向量,但底层实现就是调用了panic。也就是说在Linux Kernel是无法注册和处理FIQ中断的在Linux Kernel的异常向量表中定义了FIQ的入口,那么看下FIQ进行了哪些处理呢?我们从el1_fiq开始分析.el1_fiq其实就是调用handle_arch_fiq指向的函数(linux/arch/ar.原创 2021-09-11 08:28:55 · 1150 阅读 · 0 评论 -
China Linux Kernel-ppt
0-1 华为云擎天架构及Zero软硬结合虚拟化3.0技术.pdf0-3 龙蜥社区-新计算场景驱动下的开源创新.pdf0-4 超级计算机富岳性能解决方案.pdf1-1 基于ebpf的应用性能加速实践.pdf1-2 The Budget Fair Queueing+.pdf1-3 基于内核的商用密码基础设施.pdf1-4 基于ARM+SPE的Perf调测功能扩展.pdf1-5 carbon_neutral_we_can_help.pdf1-6 Improvement of PTE page t.原创 2021-11-13 18:36:00 · 339 阅读 · 0 评论 -
Linux Kernel中断下半部分实现的三种方式
目前有三种中断的三种机制:软中断tasklet工作队列软中断软中断是一组静态定义的下半部接口,有 32 个,可以在所有处理器上同时执行(瞎胡扯哈!!看看gic初始化流程,所有中断只routing到boot cpu上…),类型相同也可以;在编译时静态注册。软中断的相关函数:注册软中断 open_softirq触发软中断 raise_softirq执行软中断 do_softirq软中断执行函数如下:(linux/kernel/softirq.c) asmlinkage __vi原创 2021-11-08 15:34:39 · 1504 阅读 · 0 评论 -
经典面试题-Linux Kernel面试题
目录一、--------------------------------------------------------------------------主要有哪几种内核锁?Linux 内核的同步机制是什么?Linux 中的用户模式和内核模式是什么含义?怎么申请大块内存?vmalloc 和 kmalloc 有什么区别?进程间通信主要有哪几种方式?伙伴系统申请内存的函数有哪些?通过 slab 分配器申请内存的函数有哪些?Linux 的内核空间和用户空间如何划分的?进程地址空间布局图?vmalloc() 申请原创 2021-10-30 23:56:35 · 1092 阅读 · 0 评论