Linux Kernel
文章平均质量分 89
Linux学习之路
这个作者很懒,什么都没留下…
展开
-
4412 audio 分析
文章目录1. 音频基本概念1.1 原理图1.2 IIS通信时序1.3 了解几个概念2. 主从模式分析3. 时钟分析3.1 Audio sub system3.2 epll3.3 IIS4. 修改记录1. 音频基本概念1.1 原理图SOC与codec之间通信分为控制接口I2C和数据接口I2S,I2S有三个时钟信号,MCLK,BCLK,LRCLK,这三个时钟尤为重要。1.2 IIS通信时序1.3 了解几个概念采样频率(FS):一秒采集多少个声音“像素”,每采集一个点,左右声道切换一次,原创 2021-06-16 11:06:31 · 2014 阅读 · 0 评论 -
common clk framework
文章目录1. 概述2. mux、gate、divider注册过程分析clk_hw_register_muxclk_hw_register_gateclk_hw_register_dividerclk_register3. 4412 audio clk 的注册过程of_clk_add_hw_provider4. 时钟的使用过程分析clk_getclk_enableclk_get_rateclk_set_rateclk_set_parent1. 概述2. mux、gate、divider注册过程分析内核将原创 2021-06-16 10:36:29 · 1686 阅读 · 1 评论 -
内核启动早期的打印
在移植4.16内核到tiny4412的过程中遇到一个问题,官方的uboot2012引导内核成功卡在staring the kernel没有了下文,看来内核还没有到注册uart驱动就已经挂掉了,尝试打开 early printk ,让内核自解压之后能够及时的打印信息。说句题外话,内核启动卡在staring the kernel,在2440的时代,未使用设备树,这种情况往往是机器ID设置错误,或者是串口波特率等方面的原因导致,在设备树的时代,机器ID已经被废除,最有可能的问题可能就是出在设备树的身上。##e原创 2021-06-11 13:49:27 · 1582 阅读 · 3 评论 -
第一章 Linux内核简介
1.1 Unix 特点Unix 很简洁,不像其他动辄几千个系统调用并且设计目的不明确的系统,Unix 仅仅提供几百个系统调用并且有一个非常明确的设计目的。Unix 中所有的东西都被当作文件对待。Unix 内核和相关的系统工具软件是用 C 语言编写而成。Unix 进程创建非常迅速,并且有一个非常独特的 fork()系统调用。1.2 Linux 简介Linux 是类 Unix 系统,但它不是原创 2017-01-30 16:32:58 · 913 阅读 · 0 评论 -
第十章 内核同步方法
原子操作原子正数操作定义一个 atomic_t 类型的数据方法很平常,你还可以在定义它时给它设定初值:atomic_t v; //定义vatomic_t u = ATOMIC_INIT(0); //定义u并把它初始化为0atomic_set(&v, 4); //v = 4 atomic_add(2, &v);原创 2017-02-04 19:44:02 · 835 阅读 · 0 评论 -
第九章 内核同步介绍
临界区所谓临界区就是访问和操作共享数据的代码段。多个执行线程并发访问同一个资源通常是不安全的,为了避免在临界区中并发访问,编程者必须保证这些代码原子的执行——也就是说,操作在执行结束前不可被打断,就如同临界区是一个不可分割的指令一样。竞争如果两个执行线程有可能处于同一个临界区中执行,那么这就是程序的一个Bug,如果这种情况确实发生了,我们就称它为竞争条件。同步避免并发和防止竞争条件称为同步。内核同步原创 2017-02-04 18:43:59 · 641 阅读 · 0 评论 -
ath9k usb wifi 网卡驱动浅析
ieee80211 802.11协议簇是国际电工电子工程学会(IEEE)为无线局域网络制定的标准。概述nl80211: 用于对无线设备进行配置管理,它是一个基本Netlink的用户态协议(User态)cfg80211: 用于对无线设备进行配置管理。与FullMAC, mac80211和nl80211一起工作。(Kernel态)mac80211: 是一个driver开发者可用于为SoftMAC原创 2016-12-15 23:06:54 · 6505 阅读 · 1 评论 -
设备树学习文章分享
分享一下学习设备树过程中看过的文章,写的都非常好,是难得的设备树学习资料。另外,有个内核开发者讲的设备树也非常好,视频有1小时20多分钟,只不过他语速太快了,接受不了,但是ppt还是不错的,可以谷歌一下Device Tree for Dummies * Device tree 背景介绍 * Device Tree Usage翻译 * 设备树解析过程 * 基于tiny4412的Linu原创 2016-12-23 20:41:22 · 2878 阅读 · 0 评论 -
Linux firmware
firmware 硬件市场的激烈竞争, 使得制造商连一点用于设备控制固件的 EEPROM 的成本都不愿意花费。因此固件一般发布在和硬件配套的驱动包中,由操作系统(其实是驱动程序)负责传送固件到设备。内核固件接口 获取固件的正确方法是当需要时从用户空间获取它。一定不要试图从内核空间直接打开包含固件的文件,那是一个易出错的操作, 因为它把策略(以文件名的形式)包含进了内核。正确的方法是使用固件接口:转载 2016-12-15 20:12:46 · 3913 阅读 · 0 评论 -
UVC 摄像头驱动(二)描述符分析
当一个 usb 设备接入时,usb 主机控制器会与设备交互,读取出设备的所有的描述符,并且调用相应 usb_driver 的 probe 函数,同时传入一个接口的指针,因为一个接口代表一个逻辑上的 usb 设备。如果 usb 设备含有多个接口,同时都被这个 usb_driver 支持的话,probe 函数就会被调用多次。 对于一个 usb 设备来说,首先它有一个设备描述符,一个设备可能会拥有多原创 2016-11-14 20:29:25 · 12271 阅读 · 3 评论 -
第二章 从内核出发
内核开发的特点:内核编程时既不能访问 C 库,也不能访问标准的 C 头文件。内核编程时必须使用 GNU C。内河编程时缺乏像用户空间的那样的内核保护机制。内核编程时难以执行浮点数运算。内核给每一个进程只有一个很小的定长堆栈。由于内核支持异步中断、抢占和 SMP,因此必须时刻注意内核同步和并发。要考虑可移植性的重要性。1、无 libc 库抑或无标准头文件 对内核来说完整的 C 库——原创 2017-01-30 16:40:41 · 630 阅读 · 0 评论 -
第三章 进程管理
1、进程和线程 进程就是出于执行期的程序,但进程并不仅仅局限于一段可执行代码。通常还要包括其它资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存空间地址及一个或多个执行线程,当然还包括用来存放全局变量的数据段等。 执行线程,简称线程,是在进程中活动的对象,每个线程拥有独立的程序计数器、进程栈和一组进程寄存器。内核调度的对象是线程,而不是进程。 对 L原创 2017-01-31 22:01:38 · 633 阅读 · 0 评论 -
第四章 进程的调度
1. 什么是调度现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务(也就是进程)。这个管理程序就是调度程序,它的功能说起来很简单:决定哪些进程运行,哪些进程等待决定每个进程运行多长时间 此外,为了获得更好的用户体验,运行中的进程还可以立即被其他更紧急的进程打断。总之,调度是一个平衡的过程。一方面,它要保证各个运行的进程能够原创 2017-01-31 22:15:30 · 787 阅读 · 0 评论 -
第五章 系统调用
什么是系统调用系统调用在用户进程和硬件设备之间添加了一个中间层。该层的作用有三个:首先,它为用户空间提供了一种硬件抽象接口,举例来说,当需要读写文件的时候,应用程序就可以不去管磁盘类型和介质,甚至不用去管文件所在的文件系统是那种类型。第二,系统调用保证了系统的稳定和安全。作为硬件设备和应用程序之间的中间人,内核可以基于权限、用户类型和其它一些规则对需要进行的访问进行裁决。第三,每个进程都运行在原创 2017-02-01 21:34:15 · 742 阅读 · 0 评论 -
第七章 中断和中断处理
什么是中断中断本质上是一种特殊的电信号,由硬件设备发向处理器,处理器接收到中断后,会马上向操作系统反应此信号到来。硬件设备产生中断的时候并不考虑处理器的时钟同步,因此中断是异步的,换句话说中断随时可能产生。什么是异常异常一般由处理器本身引起(异常是同步中断),比如运算中的除0操作。中断处理程序——中断上下文、原子上下文中断处理程序与其他内核函数的真正区别在于,中断处理程序是被内核调用来相应中断的,而原创 2017-02-01 21:46:41 · 989 阅读 · 1 评论 -
第八章 下半部和推后执行的工作
上半部的局限性:中断处理程序以异步方式执行,并且它有可能打断其他重要代码(甚至包括其他中断处理程序)的执行,因此中断处理程序应该越快越好。如果当前有一个中断处理程序正在执行,在最好的情况下(如果IRQF_DISABLED没有被设置),与该中断同级的其他中断被屏蔽,在最坏的情况下(设置了IRQF_DISABLED),当前处理器上所有其他中断都会被屏蔽。因为禁止中断后硬件与操作系统无法通信,因此,中原创 2017-02-02 20:24:24 · 707 阅读 · 1 评论 -
USB驱动——描述符、URB、管道
大家常说,一个设备通常有多个配置,配置通常有多个接口,接口通常有多个端点。接口代表逻辑上的设备,比如声卡分为 录音和播放。访问设备时,访问的是某个接口(逻辑设备)。除了端点0之外,每个端点只支持一个传输方向,一种性质的传输传输数据时,读写某个端点,端点是数据通道。 本文首先分析设备、配置、接口、设置、端点之间的关系,然后根据 2440-ochi 驱动程序,分析一个设备注册到内核时,它的这原创 2016-07-19 11:44:03 · 8491 阅读 · 0 评论 -
USB驱动——键盘驱动(控制传输)
本文以 usbkbd.c 为例,分析 usb 键盘驱动程序。static int __init usb_kbd_init(void){ int result = usb_register(&usb_kbd_driver); if (result == 0) printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":" DRIV原创 2016-07-21 12:25:56 · 5646 阅读 · 2 评论 -
USB驱动——鼠标驱动程序(中断传输)
本文以 usbmouse.c 为例,简单分析usb鼠标驱动程序。static int __init usb_mouse_init(void){ int retval = usb_register(&usb_mouse_driver); if (retval == 0) printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"原创 2016-07-20 17:46:19 · 3788 阅读 · 0 评论 -
tasklet
将中断处理分成top half(cpu和外设之间的交互,获取状态,ack状态,收发数据等)和bottom half(后段的数据处理)已经深入人心,对于任何的OS都一样,将不那么紧急的事情推迟到bottom half中执行是OK的,具体如何推迟执行分成两种类型:有具体时间要求的(对应linux kernel中的低精度timer和高精度timer)和没有具体时间要求的。对于没有具体时间要求的又可以分成转载 2016-06-30 22:42:09 · 3042 阅读 · 0 评论 -
Linux工作队列实现机制
本文转载自:http://blog.csdn.net/tommy_wxie/article/details/7204306工作项、工作队列和工作者线程 把推后执行的任务叫做工作(work),描述它的数据结构为work_struct ,这些工作以队列结构组织成工作队列(workqueue),其数据结构为workqueue_struct ,而工作线程就是负责执行工作队列中的工作。系统默转载 2016-06-30 22:18:26 · 1948 阅读 · 0 评论 -
Linux 进程控制——进程调度
一、进程的特点 1、有一段程序供其执行 2、有进程专用的系统空间堆栈 3、有一个 task_struct 数据结构记录进程的信息 4、独立的存储空间,意味着除了专用的系统空间堆栈外还要有用户空间堆栈 如果以上条件,只是缺少用户空间堆栈,完全没有被称为“内核线程”,共享用户空间被成为“用户线程”。 Linux 系统中,进程 process原创 2016-06-30 11:56:04 · 1054 阅读 · 0 评论 -
Linux 进程控制——等待队列详解
一、什么是睡眠 对于一个进程"睡眠"意味着什么? 当一个进程被置为睡眠, 它被标识为处于一个特殊的状态并且从调度器的运行队列中去除. 直到发生某些事情改变了那个状态, 这个进程将不被在任何 CPU 上调度, 并且, 因此, 将不会运行. 一个睡着的进程已被搁置到系统的一边, 等待以后发生事件. LDD3说得很玄乎,睡眠是“自愿调度”,其实就是将当前进程的状态设置为 TASK原创 2016-06-29 21:48:24 · 14250 阅读 · 2 评论 -
tty初探—uart驱动框架分析
本文参考了大量牛人的博客,对大神的分享表示由衷的感谢。主要参考: tty驱动分析 :http://www.wowotech.net/linux_kenrel/183.html Linux TTY驱动--Uart_driver底层:http://blog.csdn.net/sharecode/article/details/9196591 Linux TTY驱原创 2016-06-28 13:23:16 · 27612 阅读 · 11 评论 -
termios 详解
一、数据成员termios 函数族提供了一个常规的终端接口,用于控制非同步通信端口。 这个结构包含了至少下列成员: tcflag_t c_iflag; /* 输入模式 */tcflag_t c_oflag; /* 输出模式 */tcflag_t c_cflag; /* 控制模式 */tcflag_t c_lflag; /* 本转载 2016-06-28 13:39:46 · 20982 阅读 · 0 评论 -
Linux内核Makefile分析
Linux内核中的Makefile虽然复杂,但是它的目的和作用与简单的Makefile都是一样的,无非是将文件编译,链接。它复杂在Linux内核文件太多,包括各种架构、各种设备,如何根据用户需求把它们巧妙的联系在一起,是Linux内核Makefile的难点。在Linux内核里,每个子目录都有一个makefile,它被称作Kbuilt-makefile,它将当前目录的文件编译成built-in.o、原创 2016-05-20 19:52:40 · 14158 阅读 · 3 评论 -
Linux内核Makefile.txt文件翻译
转载自:http://www.cnblogs.com/jason-lu/p/3728198.html --译自Linux3.9.5 Kernel Makefiles(内核目录documention/kbuild/makefiles.txt) kbuild(kernel build) 内核编译器 This document describes the Linux kernel Makefil转载 2016-05-18 21:05:13 · 3749 阅读 · 0 评论 -
实验探究 ioremap
ioremap 写驱动最常用的函数之一,但是对它始终一知半解,看了内核关于这部分的代码,功力不够也是一头雾水。本文通过实验的方法,了解 ioremap 到底干了些啥,本文献给那些看不懂内核源代码,还想知道 ioremap 能干些什么,干了些什么的同学。 实验方法: 点灯实验,LED接在GPB5~8,因此需要使用 gpbcon 配置,gpbdat 输出高低。原创 2016-07-27 16:19:20 · 3303 阅读 · 0 评论 -
Linux 链接脚本分析
在前面学习的过程中,看代码时遇到 arch_initcall(xxx) 等函数总是处于愣神的状态,对于最基础的 module_init(xxx) 也只是拿来用用,不知道幕后的东西,了解 MACHINE_START 创建了一个 machine_desc ,缺不知道 machine_desc->map_io 等函数时何时调用的。 这篇文章,就来搞定他们,再遇到它们时,拒绝懵比!首原创 2016-06-28 22:21:38 · 2046 阅读 · 0 评论 -
移植linux3.4.2以及文件系统制作笔记
高版本内核对于2440平台开发板支持已经相当到位,对于板级的设备已经完美支持无需修改,比如 Norflash nandflash 等等,对于 LCD 等“特殊”设备还需要移植。本文重点在于配置3.4.2内核使其支持 yaffs2 文件系统以及yaffs2 jffs2 文件系统的制作和注意事项。 开发板 :2440 编译器 :4.3.2 arm-linux-g原创 2016-09-19 22:06:38 · 1852 阅读 · 1 评论 -
V4L2(二)虚拟摄像头驱动vivi深入分析
前面一篇文章中,简单分析了 V4L2 大框架,本文借助内核中的虚拟摄像头驱动 vivi 来分析一个完整的摄像头驱动程序。vivi 相对于后面要分析的 usb 摄像头驱动程序,它没有真正的硬件相关层的操作,也就是说抛开了复杂的 usb 层的相关知识,便于理解 V4L2 驱动框架,侧重于驱动和应用的交互。 前面我们提到,V4L2 的核心是 v4l2-dev.c 它向上提供统一的文件操作接口 v4原创 2016-11-06 23:14:10 · 8559 阅读 · 2 评论 -
浅析 Linux poll 机制
在用户空间应用程序向驱动程序请求数据时,有以下几种方式:1、不断查询,条件不满足的情况下就是死循环,非常耗cpu2、休眠唤醒的方式,如果条件不满足,应用程序则一直睡眠下去3、poll机制,如果条件不满足,休眠指定的时间,休眠时间内条件满足唤醒,条件一直不满足时间到达自动唤醒4、异步通知5、同步阻塞原创 2016-09-29 21:05:21 · 7202 阅读 · 0 评论 -
浅析 Linux fasync 异步通知
linux 系统中的 fasync 类似于 qt 的信号与槽机制,在应用程序向驱动程序请求数据时可以使用这种方法。驱动程序中有数据可读,发送信号给应用程序来读取。原创 2016-09-29 21:45:19 · 2164 阅读 · 0 评论 -
Arm Linux系统调用流程详细解析-SWI
转自:http://www.diybl.com/course/6_system/linux/Linuxjs/20090515/167024.html Unix系统通过向内核发出系统调用(system call)实现了用户态进程和硬件设备之间的大部分接口。系统调用是操作系统提供的服务,用户程序通过各种系统调用,来引用内核提供的各种服务,系统调用的执行让用户程序陷入内核,转载 2016-09-29 16:02:18 · 5725 阅读 · 0 评论 -
mtd-utils命令简介
【转载自】:http://blog.csdn.net/yinkaizhong/archive/2008/12/25/3604794.aspx使用命令前用cat /proc/mtd 查看一下mtdchar字符设备;或者用ls -l /dev/mtd*#cat /proc/mtddev: size erasesize namemtd0: 00c00000 0002000转载 2016-10-13 19:41:33 · 9072 阅读 · 0 评论 -
在Linux运行期间升级Linux系统(Uboot+kernel+Rootfs)
本文主要介绍了如何在嵌入式Linux系统运行的时候,进行升级整个Linux系统,包括uboot,kernel和rootfs。以及简介Linux中的已有的通用的Nor Flash驱动m25p80,和简介mtd util以及相关工具mtdinfo,flash_erase,flash_eraseall,nanddump,nandwrite等的基本用法。转载 2016-10-12 22:19:54 · 9503 阅读 · 0 评论 -
浅析 mtd 子系统
以 nandflash 驱动程序为例,简单分析一下内核中的 MTD 子系统。前面分析过块设备驱动程序,一个块设备需要用一个 gendisk 结构体来描述,还要提供 I/O 请求队列和 I/O 请求处理函数。如果按照这个思路的话,nandflash 驱动程序我们就需要在请求处理函数中实现对 nandflash 的读写操作,事实上确实如此,只不过内核在块设备驱动的基础上又封装了一层,也就是所谓的MTD,现在只需要创建并填充一个 mtd_info 然后 add_mtd_partitions ,内核就会帮我们构造原创 2016-10-10 23:20:16 · 1572 阅读 · 0 评论 -
输入子系统 input_match_device 匹配过程剖析
在刚开始学习驱动程序的时候,分析过输入子系统 dev handler 它们之间的关系,现在回过头来复习时,发现当初并没有总结 dev 和 handler 具体的匹配过程,它们是一对一的关系,还是可以多对多? 为什么会想到这个问题呢,是因为曾经在 2440 平台上做按键输入子系统驱动实验时发现按键上报的数据可以从tty1 中 cat 到,也可以从 inputn 中 cat 到。原创 2016-09-20 21:33:20 · 3284 阅读 · 1 评论 -
Linux内核配置以及Make menuconfig过程分析
参考:http://blog.csdn.net/zhengmeifu/article/details/7682373 一、Linux内核的配置系统由三个部分组成,分别是: 1、Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则; 2、配置文件(config.in(2.4内核,2.6内核)):给用户原创 2016-05-17 00:37:18 · 9837 阅读 · 3 评论