![](https://img-blog.csdnimg.cn/20210516210737871.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux内核
文章平均质量分 77
Linux内核系列文章
Hello Mr.Z
君子以立不易方
展开
-
Linux驱动——MMC/SPI/I2C
Linux驱动——MMC/SPI/I2C原创 2023-02-02 17:57:37 · 264 阅读 · 0 评论 -
Linux驱动——ALSA
ALSA_control&dapm宏定义小狼@http://blog.csdn.net/xiaolangyangyangControl宏定义:SOC_SINGLE_VALUESOC_SINGLE_VALUE_EXTSOC_SINGLESOC_SINGLE_TLVSOC_DOUBLESOC_DOUBLE_RSOC_DOUBLE_TLVSOC_DOUBLE_R_TLVSOC_DOUBLE_S8_TLVSOC_ENUM_DOUBLESOC_ENUM_SINGLESOC..原创 2022-05-03 18:41:15 · 2278 阅读 · 0 评论 -
Linux驱动——PCI
PCI设备小狼@http://blog.csdn.net/xiaolangyangyangPCI设备枚举过程:(PC系统中BIOS和OS均实现了枚举过程,linux可通过内核PCI access mode配置选择使用OS还是BIOS进行枚举,嵌入式系统中枚举过程由linux驱动实现)1、PCI控制器是通过读取配置空间寄存器的VID检测是否存在bridge或device,读取值为0xFF则为空;2、PCI控制器在bus上(从bus0-device0-func0开始)扫描br..原创 2022-04-17 09:54:38 · 2997 阅读 · 0 评论 -
几种嵌入式操作系统对比
几种嵌入式操作系统对比小狼@http://blog.csdn.net/xiaolangyangyang 调度触发机制 调度策略 系统原语 内存管理 License Linux 系统调用 中断 schedule() 抢占式 时间片 原子操作 内存屏障 Spinlock Semaphore Seqlock Rwlock M...原创 2021-05-17 22:13:39 · 576 阅读 · 0 评论 -
Linux内核原语(一)——汇总
Linux并发与竞争小狼@http://blog.csdn.net/xiaolangyangyang原创 2015-02-12 16:12:26 · 562 阅读 · 0 评论 -
Linux内核原语(二)——简介
Linux内核原语介绍小狼@http://blog.csdn.net/xiaolangyangyang在使用共享内存的程序代码中,为了保护共享资源,放置共享资源的并发访问导致的错误逻辑,需要用到内核同步机制。临界区是访问和操作共享数据的代码段。多个执行线程并发访问同一个资源(读/写),通常是不安全的,为了避免这种隐患,编程人员必须保证这种访问是原子的(不可打断)。造成并发的原因造成并发有多种原因:中断-------------------------...转载 2021-05-17 23:00:10 · 301 阅读 · 0 评论 -
Linux内核原语(三)——原子操作
Linux内核原语(二)——原子操作小狼@http://blog.csdn.net/xiaolangyangyang原子操作,指的是一段不可打断的执行。也就是你不可分割的操作。在 Linux 上提供了原子操作的结构,atomic_t :typedef struct { int counter;} atomic_t;把整型原子操作定义为结构体,让原子函数只接收atomic_t类型的参数进而确保原子操作只与这种特殊类型数据一起使用,同时也保证了该类型的数...转载 2021-05-17 23:22:49 · 561 阅读 · 0 评论 -
Linux内核原语(四)——内存屏障
Linux内核原语(三)——内存屏障小狼@http://blog.csdn.net/xiaolangyangyang编译器有时会对代码做一些优化,例如尝试在保证程序执行正确的前提下修改指令顺序或优化ldr/str指令,让程序执行地更快。但是编译器毕竟不能完全猜透人的心思,有时候它做的优化会导致程序运行不符我们的预期。因此,内核中提供了一些额外的函数,可以插在某段代码里,告诉编译器不要在这里做指令优化。这些函数分为两种:内存屏障:rmb(), wmb(), mb(...转载 2021-05-17 23:29:12 · 517 阅读 · 0 评论 -
Linux内核原语(五)——自旋锁(Spinlock)
Linux内核原语(四)——自旋锁(Spinlock)小狼@http://blog.csdn.net/xiaolangyangyang内核当发生访问资源冲突的时候,可以有两种锁的解决方案选择:一个是原地等待 一个是挂起当前进程,调度其他进程执行(睡眠)Spinlock 是内核中提供的一种比较常见的锁机制,自旋锁是“原地等待”的方式解决资源冲突的,即,一个线程获取了一个自旋锁后,另外一个线程期望获取该自旋锁,获取不到,只能够原地“打转”(忙等待)。由于自旋锁的这个忙等待的特性,注定...转载 2021-05-17 23:40:31 · 1632 阅读 · 0 评论 -
Linux内核原语(六)——读-写自旋锁(rwlock)
Linux内核原语(四)——读-写自旋锁(rwlock)小狼@http://blog.csdn.net/xiaolangyangyang上一章聊到了内核的自旋锁 spinlock 相关的内容,试想这样一种场景:一个内核链表元素,很多进程(或者线程)都会对其进行读写,但是使用 spinlock 的话,多个读之间无法并发,只能被 spin,为了提高系统的整体性能,内核定义了一种锁:1. 允许多个处理器进程(或者线程或者中断上下文)并发的进行读操作(SMP 上),这样是安全的,并且提...转载 2021-05-17 23:52:29 · 512 阅读 · 0 评论 -
Linux内核原语(七)——顺序锁(seqlock)
Linux内核原语(七)——顺序锁(seqlock)小狼@http://blog.csdn.net/xiaolangyangyang上一章中讲到的读-写自旋锁,更加偏向于读者。内核提供了更加偏向于写者的锁 —— seqlock这种锁提供了一种简单的读写共享的机制,他的设计偏向于写者,无论是什么情况(没有多个写者竞争的情况),写者都有直接写入的权利(霸道),而读者呢?这里提供了一个序列值,当写者进入的时候,这个序列值会加 1,而读者去在读出数值的前后分别来 check 这个值,便...转载 2021-05-18 15:32:12 · 312 阅读 · 0 评论 -
Linux内核原语(八)——信号量(semaphore)
Linux内核原语(八)——信号量(semaphore)小狼@http://blog.csdn.net/xiaolangyangyangLinux Kernel 除了提供了自旋锁,还提供了睡眠锁,信号量就是一种睡眠锁。信号量的特点是,如果一个任务试图获取一个已经被占用的信号量,他会被推入等待队列,让其进入睡眠。此刻处理器重获自由,去执行其他的代码。当持有的信号量被释放,处于等待队列的任务将被唤醒,并获取到该信号量。从信号量的睡眠特性得出一些结论:由于竞争信号量的时候,未能拿...转载 2021-05-18 15:37:58 · 749 阅读 · 0 评论 -
Linux内核原语(九)——互斥体(mutex)
Linux内核原语(九)——互斥体(mutex)小狼@http://blog.csdn.net/xiaolangyangyang互斥体是一种睡眠锁,他是一种简单的睡眠锁,其行为和 count 为 1 的信号量类似。(关于信号量参考:Linux内核原语(八)——信号量(semaphore))。互斥体简洁高效,但是相比信号量,有更多的限制,因此对于互斥体的使用条件更加严格:任何时刻,只有一个指定的任务允许持有 mutex,也就是说,mutex 的计数永远是 1; 给 mutex 上...转载 2021-05-18 16:12:40 · 658 阅读 · 0 评论 -
Linux内核原语(十)——RCU机制
Linux内核原语(十)——RCU机制小狼@http://blog.csdn.net/xiaolangyangyangRCU 的全称是(Read-Copy-Update),意在读写-复制-更新,在 Linux 提供的所有内核互斥的设施当中属于一种免锁机制。在之前讨论过的读写自旋锁(rwlock)、顺序锁(seqlock)一样,RCU 的适用模型也是读写共存的系统。读写自旋锁:读者和写者互斥,读者和读者共存,写者和写者互斥。(偏向读者) 顺序锁:写者和写者互斥,写者直接打断读者...转载 2021-05-18 16:26:40 · 728 阅读 · 0 评论 -
Linux内核原语(十一)——互斥锁MUTEX实现信号量SEMA
Linux内核原语(十一)——互斥锁MUTEX实现信号量SEMA小狼@http://blog.csdn.net/xiaolangyangyang/* ======================== SYNCHRONISATION ========================= *//* Init semaphore to 1 or 0 */void bsem_init(bsem *bsem_p, int value) { if (value < 0 ...转载 2021-05-18 16:43:23 · 350 阅读 · 0 评论 -
Linux内核原语(十二)——Spinlock与内核抢占
spin_lock与内核抢占小狼@http://blog.csdn.net/xiaolangyangyang内核抢占特性 2.6内核版本加入了抢占的特性,但我们可以配置为抢占和非抢占模式。 在单处理器2.6版本的非抢占模式下,spin_lock被编译为一条空语句,什么都不干; 在单处理器2.6版本的抢占模式下原创 2016-04-18 10:32:47 · 1420 阅读 · 0 评论 -
Linux内核原语(十三)——Linux的死锁检测
Linux的死锁检测小狼@http://blog.csdn.net/xiaolangyangyang转载 2016-06-28 16:50:02 · 1251 阅读 · 0 评论 -
Linux内存管理(一)——slab机制(初始化)
Linux内存管理之slab机制(初始化)小狼@http://blog.csdn.net/xiaolangyangyang一、内核启动早期初始化 start_kernel()->mm_init()->kmem_cache_init() 执行流程: 1,初始化静态initkmem_list3三链;原创 2015-02-06 14:35:08 · 806 阅读 · 0 评论 -
Linux驱动(一)——知识点汇总
Linux驱动知识点汇总小狼@http://blog.csdn.net/xiaolangyangyang 内存管理 锁机制 中断 USB Linux网络 Linux存储1、Makefile2、连接脚本 查看ld工具默认连接脚本:ld -verbose3、EL原创 2015-09-26 21:03:57 · 864 阅读 · 0 评论 -
Linux驱动(二)——热插拔和mdev机制
mdev是busybox自带的一个简化版的udev,作用是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件,在文件系统中的/dev目录下的设备节点都是由mdev创建的mdev扫描/sys/class和/sys/block中所有的类设备目录,如果在目录中含有名为"dev"的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev下创建设备节点用法:原创 2016-04-12 13:47:54 · 1914 阅读 · 0 评论 -
Linux驱动(三)——内核线程
Linux内核线程小狼@http://blog.csdn.net/xiaolangyangyangTCP/IP——网络编程模型小狼@http://blog.csdn.net/xiaolangyangyang原创 2016-06-27 09:29:10 · 563 阅读 · 0 评论 -
Linux文件系统(一)——常用文件系统
常用嵌入式文件系统小狼@http://blog.csdn.net/xiaolangyangyangNAND+Flash文件系统—YAFFS2在Linux下的实现http://wenku.baidu.com/link?url=IbTzaZj3YrpfzfEHRW_l-trTY7T0vyFK3JclJLEUMRPpeTDRKN5yuWfi6o7zY7原创 2015-09-28 11:37:48 · 491 阅读 · 0 评论 -
Linux文件系统(二)——NFS应用
NFS文件系统的应用小狼@http://blog.csdn.net/xiaolangyangyang一.Ubuntu系统安装nfs-kernel-server#sudo apt-get install portmap nfs-kernel-server#sudo apt-get install portmap nfs-common二.原创 2015-02-06 14:25:08 · 406 阅读 · 0 评论 -
Linux下的lds链接脚本简介(一)
Linux下的lds链接脚本简介(一)小狼@http://blog.csdn.net/xiaolangyangyang一、 概论每一个链接过程都由链接脚本(linker script, 一般以lds作为文件的后缀名)控制. 链接脚本主要用于规定如何把输入文件内的section放入输出文件内, 并控制输出文件内各部分在程序地址空间内的布局. 但你也可以转载 2015-04-02 13:35:36 · 304 阅读 · 0 评论 -
Linux下的lds链接脚本简介(二)
Linux下的lds链接脚本简介(二)小狼@http://blog.csdn.net/xiaolangyangyang七、 SECTIONS命令SECTIONS命令告诉ld如何把输入文件的sections映射到输出文件的各个section: 如何将输入section合为输出section; 如何把输出section放入程序地址空间转载 2015-04-02 13:43:39 · 352 阅读 · 0 评论 -
Linux下的lds链接脚本简介(三)
Linux下的lds链接脚本简介(三)小狼@http://blog.csdn.net/xiaolangyangyang八、 内存区域命令在默认情形下,连接器可以为section在程序地址空间内分配任意位置的存储区域。并通过输出section描述的> REGION属性显示地将该输出section限定于在程序地址空间内的某块存储区域,当存储区域大小不能满转载 2015-04-02 13:48:08 · 490 阅读 · 0 评论 -
Linux下的lds链接脚本简介(四)
Linux下的lds链接脚本简介(四)小狼@http://blog.csdn.net/xiaolangyangyang十一、 表达式lds中表达式的文法与C语言的表达式文法一致,表达式的值都是整型,如果ld的运行主机和生成文件的目标机都是32位,则表达式是32位数据,否则是64位数据。以下是一些常用的表达式:_fo转载 2015-04-02 13:51:46 · 504 阅读 · 0 评论 -
Linux Kernel Learning
Linux Kernel Learning小狼@http://blog.csdn.net/hot_zcy2012探索 Linux 内存模型kernel 启动过程之二, arch/arm/kernel/head.Skernel 启动过程之一, uimge, zimage,arch/arm/boot/compressed/head.SLinux节点和内存管理区的初始化Linux内存布局Linux内存管...原创 2018-06-14 09:07:15 · 317 阅读 · 0 评论