![](https://img-blog.csdnimg.cn/20200614180447581.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
linux kernel
文章平均质量分 71
linux kernel
代码改变世界ctw
ARMv8/ARMv9/TEE/安全/芯片
展开
-
Linux内核驱动面试的100问
- 什么是Linux内核?与用户空间有何区别?- Linux内核的主要功能有哪些?- 内核模块是什么?它们是如何工作的?- 描述内核空间和用户空间之间的通信机制。- 什么是系统调用?请给出几个例子。- 如何查看当前系统的内核版本?- 解释Linux内核的模块化是如何实现的。- 什么是设备树?它在Linux内核中扮演什么角色?原创 2024-02-23 07:53:33 · 1335 阅读 · 0 评论 -
Linux Kernel的local_irq_enable()和local_irq_disable()函数
代码如下图所示,最终操作的是。原创 2023-08-19 08:26:59 · 381 阅读 · 0 评论 -
Linux Kernel信息
Linux Kernel 5.9.0, 大概有58181个源文件原创 2021-02-26 12:56:05 · 48 阅读 · 0 评论 -
LUKS磁盘加密
LUKS (Linux Unified Key Setup)是 Linux 硬盘加密的标准。 通过提供标准的磁盘格式,它不仅可以促进发行版之间的兼容性,还可以提供对多个用户密码的安全管理。 与现有解决方案相比,LUKS 将所有必要的设置信息存储在分区信息首部中,使用户能够无缝传输或迁移其数据。原创 2023-06-14 20:56:43 · 579 阅读 · 0 评论 -
强制给CPU调频/定频的方法
强制给CPU调频/定频的方法。原创 2023-01-28 07:08:56 · 903 阅读 · 0 评论 -
Kernel的编译
例如,编译一个5.10 ffa版本的kernel。例如,编译一个6.1版本的kernel。原创 2022-10-25 23:41:24 · 368 阅读 · 0 评论 -
ftrace的使用方法
ftrace原创 2022-10-22 14:51:15 · 237 阅读 · 0 评论 -
执行make menuconfig后编译Linux内核出现Restart config问题
在编译内核时,指定好配置时指定的架构和编译器,make 对应的镜像即可。在配置内核时, 指定好对应的架构和编译器, 在配置完成以后save。原因:出现以上问题时,一般是配置内核时,没有指定好架构和编译器。原创 2022-10-22 14:04:41 · 751 阅读 · 0 评论 -
cryptocell学习笔记
在Linux Kernel中开启CONFIG_CRYPTO_DEV_CCREE宏控即可, 代码路径如下:ATF中,开启ARM_CRYPTOCELL_INTEG := 0即可原创 2022-01-14 20:11:54 · 444 阅读 · 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 · 1706 阅读 · 0 评论 -
一文了解Linux Kernel中密码学算法的设计与应用
1、Linux Kernel中支持哪些密码学算法?分别都是怎么实现的?哪些是C语言实现?哪些是Neon指令实现?哪些是ARM Cryptography Extension硬件实现? 这些不同的实现方式,他们之间的关系是怎样的? 并列关系?多选一?多选多?2、应用程序的密码学算法一般又是怎样实现的?应用程序的密码学算法实现,是否依赖Kernel底层的密码学算法?3、应用程序是如何调用到Kernel底层的密码学算法? Kernel底层的其它模块,如何调用密码学算法?4、如何在Kernel底层增加一种密码学原创 2022-05-08 00:00:49 · 2204 阅读 · 0 评论 -
Linux内核编码风格
Linux内核编码风格这是一个简短的文档,描述了 linux 内核的首选编码风格。编码风格是很个人的,我不会逼上任何人我的看法,但是这所讲述的东西,我必须能够维持,并且我也希望它对于大多数其他的一些东西。请至少考虑这里提出的观点。首先,我建议打印一份 GNU 编码标准的副本,而不是阅读它。烧掉它们,这是一个伟大的象征性姿态。无论如何,这里是:缩进制表符是 8 个字符,因此缩进也是 8 个字符。有一些异端运动试图使缩进 4(甚至 2!)个字符深,这类似于试图将 PI 的值定义为 3。基本原理:原创 2021-12-26 13:35:38 · 1113 阅读 · 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 · 880 阅读 · 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 · 3912 阅读 · 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 · 651 阅读 · 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 · 1598 阅读 · 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 · 1077 阅读 · 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 · 1754 阅读 · 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 · 1362 阅读 · 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 · 576 阅读 · 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 · 1104 阅读 · 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 · 333 阅读 · 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 · 1460 阅读 · 0 评论 -
经典面试题-Linux Kernel面试题
目录一、--------------------------------------------------------------------------主要有哪几种内核锁?Linux 内核的同步机制是什么?Linux 中的用户模式和内核模式是什么含义?怎么申请大块内存?vmalloc 和 kmalloc 有什么区别?进程间通信主要有哪几种方式?伙伴系统申请内存的函数有哪些?通过 slab 分配器申请内存的函数有哪些?Linux 的内核空间和用户空间如何划分的?进程地址空间布局图?vmalloc() 申请原创 2021-10-30 23:56:35 · 1018 阅读 · 0 评论 -
Linux Kernel中spinlock的设计与实现
背景早期spinlock的设计早期的spinlock的设计是锁的拥有者加锁时将锁的值设置为1,释放锁时将锁的值设置为0,这样做的缺点是会出现 先来抢占锁的进程一直抢占不到锁,而后来的进程可能一来 就能获取到锁。导致这个原因的是先抢占的进程和后抢占的进程在抢占锁时并没有一个先后关系,最终就是离锁所在的内存最近的cpu节点就有更多的机会抢占锁,离锁所在内存远的节点可能一直抢占不到。新版spinlock设计为了解决这个spinlock的不公平问题,linux 2.6.25内核以后,spinlock采原创 2021-10-25 13:16:14 · 625 阅读 · 0 评论 -
Exclusive monitor在spinlock中的应用
目录1、Exclusive monitor概念2、独占访问在spinlock中的应用1、Exclusive monitor概念ARMv6 架构时引入了对内存位置进行独占访问的概念,提供了更灵活的原子内存更新。对应的独占访问的指令是:LDREX 和STREX. 而在armv8架构中,这两个指令变成了LDXR和STXR独占监视器是一个简单的状态机,具有open和exclusive的两种状态。 为了支持处理器之间的同步,系统必须实现两组监视器,local和global。 Load-Exclusive 操作原创 2021-10-25 11:30:34 · 965 阅读 · 0 评论 -
探究实现中断下半部分的第四种方式
我们知道实现中断下半部的机制有三种:软中断tasklet工作队列那么真的就只有这3种吗? 还有没有其它的方式呢?(网上/书本上大多数的介绍都是3种,抄来抄去或学习二手信息有意思吗)以下用图文的方式向大家展示了另外一种方式,即:使用一对完成量实现的中断下半部分。在中断处理函数中,complete这个变量,在一个死循环的函数中wait_for_completion这个变量,然后解析不同参数干不同的活…......原创 2021-09-11 15:50:12 · 325 阅读 · 0 评论 -
wait_event()和wait_event_interruptible()的介绍
我们先写下该函数的含义:先判断一下condition条件,如果条件不成立,则将当前进程挂在等待队列中,如果条件成立,则唤醒等待队列.在kernel-4.14/include/linux/wait.h中,有着大量的wait_event类的API函数,wait_event(wq_head, condition)wait_event_timeout(wq_head, condition, timeout)wait_event_interruptible(wq_head, condition)wait_原创 2021-08-24 15:38:39 · 1179 阅读 · 0 评论 -
Linux kernel crypto的介绍
在linux kernel中,支持以下四种crypto算法:algif_aead.calgif_hash.calgif_rng.calgif_skcipher.c原创 2021-01-04 21:09:04 · 5431 阅读 · 4 评论 -
[armv8-arch64]linux kernel 5.9的异常量表介绍(irq,fiq,sync,svc)
在entry.S中,定义了异常向量表,从代码中我们可以知道以下信息:该表的基地址在vectors处(在开机的时候,会将其写入到vbar_el1中)这个表以".align 11"方式对齐,即这张表至少占据2^11 sizekernel_entry是一个用于定义向量表offset的宏,在kernel_entry中,是以“.align 7”方式对齐的,即2^8=0x80方式对齐,与ARMV8中的向量表offset一致armv8的向量表中又16个offset,在Linux Kernel中,仅实现了6个L原创 2021-03-29 19:02:06 · 708 阅读 · 3 评论 -
ioctl,unlocked_ioctl,compat_ioctl之间的区别
原文:Follows an explanation of the patch that introduced unlocked_ioctl and compat_ioctl into 2.6.11.The removal of the ioctl field happened a lot later, in 2.6.36.Explanation: When ioctl was executed, it took the Big Kernel Lock (BKL), so nothing else c原创 2021-03-24 20:49:52 · 2184 阅读 · 0 评论 -
Linux Kernel中的系统调用分析
文章目录1、系统调用在Linux Kernel中的map表(系统调用的数组)2、系统调用的函数在Kernel中的实现3、系统调用的流程4、总结1、系统调用在Linux Kernel中的map表(系统调用的数组)在sys.c中定义了__SYSCALL宏(kernel-4.19/arch/arm64/kernel/sys.c)#define __SYSCALL(nr, sym) asmlinkage long __arm64_##sym(const struct pt_regs *);例如:_原创 2021-01-20 11:17:21 · 1753 阅读 · 0 评论 -
Linux Kernel中gicv3实现:SPIs中断routing到指定的CPU
gic代码串讲1、开机时,为每个cpu分配affinity编号开机时,为每个cpu分配affinity编号,并写入到mpidr_el1系统寄存器中setup_arch()–>smp_build_mpidr_hash()static void __init smp_build_mpidr_hash(void){ u32 i, affinity, fs[4], bits[4], ls; u64 mask = 0; /* * Pre-scan the list of MPIDRS and原创 2021-01-11 17:52:51 · 1590 阅读 · 0 评论 -
android/linux中的第一个init程序的启动
目录1、编译android的ini程序2、kernel中执行/init程序的流程3、run_init_process()程序介绍1、编译android的ini程序2、kernel中执行/init程序的流程在start_kernel的末尾处, 调用了reset_init()asmlinkage __visible void __init start_kernel(void){ ...... rest_init();}reset_init()启了一个kernel线程kernel_initk原创 2021-01-05 16:59:19 · 2192 阅读 · 0 评论 -
Linux Kernel aarch64的ARM-CE aes-ecb的底层代码导读
在Makefile中定义了宏INTERLEAVE=4Makefile:41:AFLAGS_aes-ce.o := -DINTERLEAVE=4Makefile:42:AFLAGS_aes-neon.o := -DINTERLEAVE=4我们直接看底层代码:do_encrypt_block4x的底层实现,可以看出,最终还是调用到了aesd、aese指令...原创 2020-12-29 19:43:15 · 2563 阅读 · 0 评论 -
Linux kernel内核调用crypto算法的方法
具体的算法:是以crypto_alg结构体来实现的 { .cra_name = "__ecb-aes-" MODE, .cra_driver_name = "__driver-ecb-aes-" MODE, .cra_priority = 0, .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER | CRYPTO_ALG_INTERNAL, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeo原创 2020-12-29 17:35:40 · 3366 阅读 · 0 评论 -
Linux Kernel aarch64 Crypto原理和框架介绍
开启ARM-CE或ARM-Neon,编译aes-glue.c文件,aes-glue.c是Linux kernel crypto aarch32/64下ARM-CE或ARM-NEON加解密调用的顶级文件。CONFIG_CRYPTO_AES_ARM64_CE_BLKCONFIG_CRYPTO_AES_ARM64_NEON_BLK注意,如果开启的是ARM-CE,则加入USE_V8_CRYPTO_EXTENSIONS宏定义在aes-glue.c中,使用USE_V8_CRYPTO_EXTENSIONS宏原创 2020-12-29 16:15:19 · 3195 阅读 · 0 评论 -
linux kernel中的wait_for_completion和complete总结
文章目录结构体init_completioncompletewait_for_completion结构体struct completion { unsigned int done; wait_queue_head_t wait;};#define UINT_MAX (~0U)init_completion#define init_completion(x) __init_completion(x)static inline void __init_completion(struct原创 2020-12-23 19:23:48 · 6300 阅读 · 0 评论 -
Linux shell/makefile/gic/python指令速查-inprocess
这里写目录标题linux shell基础1、大小写转换2、for循环3、if判断4、switch-caselinux shell基础1、大小写转换$ test="abcDEF"把变量中的第一个字符换成大写$ echo ${test^}AbcDEF把变量中的所有小写字母,全部替换为大写$ echo ${test^^}ABCDEF把变量中的第一个字符换成小写$ echo ${test,}abcDEF把变量中的所有大写字母,全部替换为小写$ echo ${test,,}abcd原创 2021-01-03 21:43:23 · 317 阅读 · 0 评论 -
linux kernel内存管理学习篇
目录1、DDR的注册(1)、在dts中定义了DDR(memory)的范围(2)、将DDR地址范围注册到linux kernel2、reserved-memory的注册(1)、在dts中定义了reserved-memory的范围(2)、将reserved memory信息告知给linux kernel1、DDR的注册(1)、在dts中定义了DDR(memory)的范围memory@0 { device_type = "memory"; reg = <0x0 0x80原创 2020-08-17 14:09:43 · 3186 阅读 · 0 评论