
Linux kernel
文章平均质量分 61
Linux kernel
四季帆
汽车电子、bsp
展开
-
无法生成设备节点
1. 背景将驱动代码编译进内核,/dev目录下正常生成设备节点 driver_test0 和 driver_test1;将驱动代码编译为 module,在系统完全启动之后,使用 insmod 加载单编的 ko 文件后,驱动加载未报错,init 和 probe 打印均有显示,这个驱动加载也未报错,驱动执行动作一切正常,只是 /dev 目录下没有生成暴露给用户态使用的设备节点。2. 第一次分析两种方式相同点:代码相同两种方式不同点:驱动加载的时机不同、编译方式不同;但是依原创 2021-05-14 15:43:30 · 2997 阅读 · 1 评论 -
Linux通知链机制
1. 概念通知链只能在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。通知链是一个函数链表,链表上的每一个节点都注册了一个函数。当某个事件发生时,链表上所有节点对应的函数就会被执行。和系统调用signal的思想差不多。2.通知链的运作机制2.1 被通知者:对某一事件感兴趣的一方。定义了当事件发生时,相应的处理函数,将其注册到通知链中,即回调函数。2.2 通知者:事件的通知者。当检测到某事件或自身产生事件时,执行通知链上所有的事件(遍历并执行通知链表上..原创 2021-05-14 15:06:07 · 490 阅读 · 0 评论 -
Linux kernel启动过程
0. 声明kernel版本号3.10.531. 链接脚本arch/arm/kernel/vmlinux.lds.S ==>vmlinux.lds生成的链接脚本(vmlinux.lds)中的重点内容如下:OUTPUT_ARCH(arm)ENTRY(stext)······根据链接脚本可知kernel执行入口为stext,搜索stext即可得到入口函数的定义。2. 入口函数(stext)实现arch/arm/kernel/head.Sstext原创 2021-05-14 14:44:56 · 699 阅读 · 0 评论 -
Linux kernel简介
1. kernel顶层目录结构include/ ---- 内核头文件,需要提供给外部模块(例如用户空间代码)使用。kernel/ ---- Linux内核的核心代码,包含了3.2小节所描述的进程调度子系统,以及和进程调度相关的模块。mm/ ---- 内存管理子系统(3.3小节)。fs/ ---- VFS子系统(3.4小节)。net/ ---- 不包括网原创 2021-05-14 12:17:55 · 1823 阅读 · 0 评论 -
设备模型
1. 背景为了降低设备多样性带来的Linux驱动开发的复杂度,以及设备热插拔处理、电源管理等等,Linux内核提供了设备模型的概念。设备模型将硬件设备归纳、分类,然后抽象出一套标准的数据结构和接口。驱动的开发,就简化为对内核所规定的数据结构的填充和实现。2. 设备模型的优势代码重复最小化提供诸如引用计数这样的统一机制列举系统中所有的设备,观察他们的状态,并且查看它们连接的总线将系统中的全部设备结构以树的形式完整、有效的展现出来(包括所有的总线和内部连接)将设备和其对应的驱动原创 2021-05-14 12:06:35 · 1776 阅读 · 0 评论 -
Linux队列
1.等待队列等待队列是一种实现阻塞和唤醒的内核机制,与进程调度机制紧密结合,能够用于实现内核中的异步事件通知机制。可以实现线程的软等待,当符合条件时从另一个线程实现软唤醒。使用方法:1.定义等待队列 static DECLARE_WAIT_QUEUE_HEAD(wq) 2.定义唤醒标志 static int w_flag = 0; //当且仅当w_flag为真,才唤醒队列3.在需要阻塞的地方调用wait_event_interruptible(wq,w_flag )函数,使原创 2021-05-14 10:43:09 · 500 阅读 · 0 评论 -
Linux中断子系统
1. 基础概念1.1 中断类型同步中断由CPU本身产生,又称为内部中断。这里同步是指中断请求信号与代码指令之间的同步执行,在一条指令执行完毕后,CPU才能进行中断,不能在执行期间。所以也称为异常(exception)。异步中断是由外部硬件设备产生,又称为外部中断,与同步中断相反,异步中断可在任何时间产生,包括指令执行期间,所以也被称为中断(interrupt)。外部硬件设备需要连接到CPU的外部中断引脚上。1.2 中断或异常处理中断处理过程:设备产生中断,并通过中断线将中断信..原创 2021-05-14 10:30:01 · 510 阅读 · 0 评论 -
Linux虚拟文件系统
1.磁盘分区与目录所有磁盘分区都必须被挂载到目录上才能使用。所谓的“挂载”就是利用一个目录当成进入点,将磁盘分区的数据放置在该目录下,即进入该目录就可以读取该分区的数据,这个操作称之为“挂载”,进入点的那个目录称为“挂载点”。由于整个Linux系统最重要的是根目录,因此根目录一定需要挂载到某个分区的,其它的目录可依据用户需求挂载到不同的分区。上图中,假设我的硬盘分为三个区,分区1被挂载到根目录,分区2被挂载到/home这个目录,分区3被同时挂载到/var和/tmp目录===》即通过.原创 2021-05-13 16:49:14 · 308 阅读 · 0 评论 -
Linux内核常见的几种同步手段
1.原子操作原子操作在执行的时候,不可能被拆分成几条原子操作,Linux内核通过提供 atomic_t类型封装了一系列原子操作。2.优化和内存屏障在指令之间插入一道屏障,两句屏障指令之间的指令不会因为优化而重排。编译器优化重排举例://优化前int x = 1;int y = 2;int a1 = x * 1;int b1 = y * 1;int a2 = x * 2;int b2 = y * 2;//优化后,CPU只需要读一次x和y的值,不需要反复读取寄存器原创 2021-05-13 16:07:17 · 696 阅读 · 0 评论 -
Linux下进程间通信
1. 管道(pipe)管道是由内核管理的一个环形缓冲区,两个进程分别连接到管道的两端,一个进程负责往管道写入信息,管道另一端的进程负责读取管道中的信息。当管道中没有信息时,从管道中读取的进程会等待,直到另一端的进程写入信息;当管道被放满信息时,尝试放入信息的进程会等待,直到另一端的进程取出信息。当两个进程都终结时,管道也会自动消失。注意:管道只能在本地计算机中使用,而不可用于网络间的通信。#include <unistd.h> int pipe(i原创 2021-05-13 15:48:02 · 196 阅读 · 0 评论 -
修改开机LOGO
1. 下载制作工具apt-get install netpbm或者apt-get install pngtopnm pnmquant pnmtoplainpnm在自己的Ubuntu中实验一下就知道了2. 制作开机LOGOsijifan$ pngtopnm linuxlogo.png > linuxlogo.pnmsijifan$ pnmquant 224 linuxlogo.pnm > linuxlogo224.pnmsijifan$ pnmtoplainpnm li原创 2021-05-13 13:07:36 · 1660 阅读 · 2 评论