Linux Kernel
文章平均质量分 62
Arrow
在技术上具有Arrow一样的钉子精神
展开
-
Linux SDIO-WiFi 协议栈
Linux SDIO-WiFi 协议栈1. 简介2. BCMDHD2.1 WiFi模组1. 简介2. BCMDHDBCMDHD:Broadcom Dongle Host DriverSIP:System In Package2.1 WiFi模组原创 2024-04-21 11:35:38 · 724 阅读 · 0 评论 -
Linux DTS (Device Tree Source)设备树源码
Linux DTS 设备树源码1. 简介1. 简介DTS 是为 Linux 提供一种硬件信息的描述方法,以此代替源码中的 硬件编码 (hard code)。DTS 即 Device Tree Source 设备树源码, Device Tree 是一种描述硬件的数据结构,起源于 OpenFirmware (OF). 在 Linux 2.6 中, ARM 架构的板级硬件细节过多的被硬编码在 arch/arm/plat-xxx 和 arch/arm/mach-xxx (比如板上的 platform 设备,r原创 2022-03-30 08:41:16 · 6668 阅读 · 0 评论 -
Linux Netlink
1. Netlink简介 Netlink 是一种特殊的 socket,它是一种在内核与用户间进行双向数据传输的一种方式,用户态应用使用标准的 socket API 就可以使用 Netlink 提供的强大功能,内核态需要使用专门的内核 API 来使用 Netlink。 系统已定义的Netlink种类如下:类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前原创 2013-08-07 10:16:19 · 9400 阅读 · 0 评论 -
Android ptrace简介
1. ptrace 本身的实现1.1 ptrace用户态定义见bionic/libc/bionic/ptrace.cextern long __ptrace(int request, pid_t pid, void *addr, void *data);long ptrace(int request, pid_t pid, void * addr, void * data){原创 2013-07-29 16:27:59 · 14124 阅读 · 1 评论 -
GNU ARM 汇编伪指令(Assembler Directives)
1. GNU ARM 汇编快速入门 任何汇编行都是如下结构:[:] [} @ comment[:] [} @ 注释 GNU ARM 汇编中,任何以冒号结尾的都被认为是一个标签,而不一定非要在一行的开始。下面是一个简单的例子,这段汇编程序定义了一个"add"的函数,该函数返回两个参数的和:.section .text, “x”.global add原创 2013-07-31 10:10:03 · 7743 阅读 · 0 评论 -
dlopen中几个flag的区别:RTLD_LAZY RTLD_NOW RTLD_GLOBAL
void *dlopen(const char *filename, int flag);其中flag有:RTLD_LAZY RTLD_NOW RTLD_GLOBAL,其含义分别为:RTLD_LAZY:在dlopen返回前,对于动态库中存在的未定义的变量(如外部变量extern,也可以是函数)不执行解析,就是不解析这个变量的地址。RTLD_NOW:与上面不同,他需要在d转载 2013-07-30 11:23:40 · 36288 阅读 · 0 评论 -
Linux wait和waitpid和kill
1. Linux wait1) 功能:等待子进程中断或结束2) 头文件 #include #include3) 函数定义: pid_t wait (int * status);4) 函数说明 wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用 wait()时子进程已经结束,则 wait()会立即返回子进程结束状态值。子原创 2013-05-29 10:29:57 · 4832 阅读 · 0 评论 -
IEEE802.11协议基础知识
1. 无线接入过程 STA (工作站)启动初始化、开始正式使用、AP 传送数据幀之前,要经过三个阶段才能接入: (1) 扫描(SCAN) (2) 认证(Authentication) (3) 关联(Association) 1.1 扫描(SCAN) 1) 若无线站点 STA 设成 Ad-hoc (无AP)模式:STA原创 2013-07-12 10:07:25 · 25815 阅读 · 3 评论 -
中断处理“下半部”机制
1. 中断处理的tasklet (小任务)机制中断服务程序一般都是在中断请求关闭的条件下执行的,以避免嵌套而使中断控制复杂化。但是,中断是一个随机事件,它随时会到来,如果关中断的时间太长,CPU就不能及时响应其他的中断请求,从而造成中断的丢失。因此,Linux内核的目标就是尽可能快的处理完中断请求,尽其所能把更多的处理向后推迟。例如,假设一个数据块已经达到了网线,当中断控制器接受到这个原创 2013-07-10 09:00:47 · 18792 阅读 · 3 评论 -
Linux中link,unlink,close,fclose详解
每一个文件,都可以通过一个struct stat的结构体来获得文件信息,其中一个成员st_nlink代表文件的链接数。struct stat { unsigned long st_dev; /* Device. */ unsigned long st_ino; /* File serial number. */ unsigned int st_mode; /* File m转载 2013-05-11 16:08:02 · 1592 阅读 · 0 评论 -
Linux Writeback机制分析
1. bdi是什么? bdi,即是backing device info的缩写,顾名思义它描述备用存储设备相关描述信息,这在内核代码里用一个结构体backing_dev_info来表示。 bdi,备用存储设备,简单点说就是能够用来存储数据的设备,而这些设备存储的数据能够保证在计算机电源关闭时也不丢失。这样说来,软盘存储设备、光驱存储设备、USB存储设备、硬盘存储设备都是所谓的备原创 2013-05-13 08:33:54 · 11287 阅读 · 0 评论 -
Linux 高级进程管理
1. 让出处理器 Linux提供一个系统调用运行进程主动让出执行权:sched_yield。进程运行的好好的,为什么需要这个函数呢?有一种情况是用户空间线程的锁定。如果一个线程试图取得另一个线程所持有的锁,则新的线程应该让出处理器知道该锁变为可用。用户空间锁没有内核的支持,这是一个最间单、最有效率的做法。但是现在Linux线程实现引入一个使用futexes的优化解决方案。 另一个情况是转载 2013-05-17 16:33:49 · 1349 阅读 · 0 评论 -
Linux Socket编程
1. 基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的。网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符。socket也有一个类似于打开文件的函数:socket(),调用socket(),该函数返回一个整型的socket的描述符,随后的连接建立、数据传输等操作也都是通过该socket实现。1.1 socket函数定义:转载 2013-08-07 11:30:05 · 1996 阅读 · 0 评论 -
SELinux - MCS
1. 简介 多类安全 (MCS: Multi-Category Security)是一个增强的SELinux,允许用户使用类别来标记文件。原创 2013-08-12 14:07:25 · 2914 阅读 · 0 评论 -
Linux /dev/uinput
1. 简介 uinput可在以下情况大显身手: 1) 不需要自己写驱动 2) 用户态向/dev/input/eventX写入事件2. 使用流程2.1 打开UInput Device:应用程序:char *dev = "/dev/uinput“;open(dev, O_WRONLY | O_NDELAY);在Kernel 层,对应的动作为转载 2013-09-27 18:01:12 · 17904 阅读 · 2 评论 -
Linux内存管理--基本概念
1. Linux物理内存三级架构 对于内存管理,Linux采用了与具体体系架构不相关的设计模型,实现了良好的可伸缩性。它主要由内存节点node、内存区域zone和物理页框page三级架构组成。 • 内存节点node 内存节点node是计算机系统中对物理内存的一种描述方法,一个总线主设备访问位于同一个节点中的任意内存单元所花的代价相同,而访问任意两个不同节点原创 2013-03-01 09:29:57 · 28552 阅读 · 8 评论 -
用户态应用程序直接与USB设备通信(不需要USB设备Driver)
1. Kernel态 devio.c: 实现用户态与USB设备通信的接口 它实现usbfs/x/y, 即/dev/bus/usb/x/y,x为bus number,y为device number 它允许用户态应用程序直接与USB设备通信(不需要USB设备Driver参与)2. User 态 /system/core/libusb原创 2013-10-29 17:41:41 · 3464 阅读 · 0 评论 -
Linux输入子系统:事件的编码 -- event-codes.txt
输入系统协议用类型types和编码codecs来表示输入设备的值并用此来通知用户空间的应用程序。这篇文档对这些类型和编码进行了说明并且指出什么时候和如何使用这些类型和编码。 一个单一的硬件事件可以产生多个输入事件,每个输入事件包含一个单一数据项的新的数据值。EV_SYN是一个特别的事件类型,它用来把同一时刻产生的多个输入数据分割为多个数据包。在下面的描述中,术语事件(event)是指一个涵转载 2013-10-24 10:18:27 · 2078 阅读 · 0 评论 -
读取并显示/dev/input/eventX事件
读取并显示/dev/input/eventX事件$getevent -l原创 2013-10-08 08:53:44 · 6998 阅读 · 1 评论 -
Linux如何查看与/dev/input目录下的event对应的设备
1. /dev/input目录 /dev/input目录下的事件都是在驱动中调用input_register_device(struct input_dev *dev)产生的。如我的盒子的/dev/input目录的内容如下:crw-rw---- root input 13, 64 1970-01-01 08:00 event0crw-rw---- root原创 2013-08-30 11:03:28 · 43457 阅读 · 4 评论 -
SELinux深入理解
1. 简介 SELinux由以下两部分组成: 1) Kernel SELinux模块(/kernel/security/selinux) 2) 用户态工具1.1 DAC与MAC的关键区别(root用户) 在SELinux(MAC)中,没有root用户的概念。安全策略是由【管理员】定义,并应用于每一个【进程】和【对象】,没有什么可以替代它。这意味着恶意原创 2013-08-09 15:33:17 · 110151 阅读 · 5 评论 -
Linux安全--访问控制机制(ACM)
1. 访问控制机制(ACM) ACM:即Access Control Mechanism ACM为系统管理员提供了一种控制哪些用户、进程可以访问不同的文件、设备和接口等的一种方式。当需要确保计算机系统或网络安全时,ACM是一个主要的考虑因素。 ACM主要有以下6种方式: 1) 自主访问控制:Discretionary Access Control (DAC)原创 2013-08-12 08:57:35 · 10116 阅读 · 0 评论 -
SELinux - Multi-Level Security (MLS)
1. 简介 保护敏感和机密信息在商业领域、军事、情报机构和政府等领域都是至关重要的。在同一台计算机上放置不同安全级别的信息构成了真正的威胁。如果为不同安全级别的信息购买相应的系统,这代价是相当昂贵的。为了解决此问题,需要一个机制,使在不同的安全级别的用户同时访问系统时,系统没有信息污染的恐惧。2. 为什么需要多级? 多级来源于原创 2013-08-12 14:34:29 · 7291 阅读 · 0 评论 -
SELinux简介
1. 简介 SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux® 上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux转载 2013-08-08 17:35:32 · 8075 阅读 · 0 评论 -
FAT32文件系统--For TF卡
1. TF卡空间是如何分配的? 下面以4GB TF卡为例,通过WinHex工具进行分析,其空间分配如下图所示: FAT32把目录当做文件来管理,所以没有独立的目录区,所有的文件目录项都是在数据区里面的。 2. 启动扇区 (DBR) DBR(DOS BOOT RECORD,DOS引导记录),位于柱面0,磁头1,扇区1,即逻辑扇区0 ; DBR原创 2013-03-27 10:12:26 · 4002 阅读 · 0 评论 -
machine_desc结构体
1. 简介 内核提供了一个重要的结构体struct machine_desc ,这个结构体在内核移植中起到相当重要的作用,内核通过machine_desc结构体来控制系统体系架构相关部分的初始化。 machine_desc结构体通过MACHINE_START宏来初始化,在代码中, 通过在start_kernel->setup_arch中调用setup_machine_fd原创 2013-02-25 15:00:51 · 6517 阅读 · 0 评论 -
Kernel 3.0.8 内存管理函数
1. 内存分配函数相关代码如下:#define alloc_pages(gfp_mask, order) alloc_pages_node(numa_node_id(), gfp_mask, order)#define alloc_page_vma(gfp_mask, vma, addr) alloc_pages(gfp_mask, 0)#define alloc_page(g原创 2012-01-18 11:50:20 · 3161 阅读 · 0 评论 -
Linux 内存文件系统
内存文件系统(linux,FreeBSD)在Linux中可以将一部分内存当作分区来使用,我们称之为RamDisk。对于一些经常被访问的文件,而它们又不会被更改,可以将它们通过RamDisk放在内存中,即可明显地提高系统的性能。当然你的内存可要足够大了。RamDisk有两种,一种可以格式化,加载,在Linux内核2.0/2.2就已经支持,其不足之处是大小固定。另一种是内核2.4才支持的,转载 2011-12-13 10:39:58 · 2435 阅读 · 0 评论 -
ARM Linux系统的时钟机制
1. Linux下有两类时钟:1.1 实时钟RTC 它由板上电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟。当操作系统关机的时候,用这个来记录时间,但是对于运行的系统是不用这个时间的。1.2 系统时钟 “System clock”也叫内核时钟或者软件时钟,是由软件根据时间中断来进行计数的,内核时钟在系统关机的情况下是不存在的,所以原创 2011-12-10 16:29:04 · 7601 阅读 · 0 评论 -
Linux hrtimer的实现
1. Linux hrtimer的实现方案 Linux hrtimer的实现是依赖硬件(通过可编程定时器来实现)的支持的,而且此定时器有自己的专用寄存器, 硬中断和频率。比如我的板子上的对应参数如下: Timer at Vir:0xE0100200 = Phy:0xE0100200, using Irq:27, at Freq:250000000,由此可见,其频率为250原创 2011-12-12 10:24:41 · 7711 阅读 · 1 评论 -
Linux hrtimer分析--配置高精度模式
转自:http://blog.csdn.net/walkingman321/article/details/6151172本文介绍Linux2.6.29中,配置高精度模式的hrtimer与未配置高精度模式时行为的区别。本文暂不考虑高精度模式对Linux系统时钟中断的影响。 在没有配置高精度模式时,hrtimer的超时在系统时钟中断的轮循中检查,所以此时hrtimer的定转载 2011-12-10 17:03:20 · 3331 阅读 · 0 评论 -
Linux hrtimer分析--未配置高精度模式
转自:http://blog.csdn.net/walkingman321/article/details/6133171本文分析了Linux2.6.29中hrtimer的实现。 Linux2.6中实现了一种新的定时器hrtimer。与传统定时器使用时间轮算法不同,hrtimer使用了红黑树算法。hrtimer本身可以配置成高精度和普通精度两种,在单CPU系统和多CPU系统中的实现也有转载 2011-12-10 17:02:21 · 3337 阅读 · 0 评论 -
Arm Linux系统调用流程详细解析-SWI
转自:http://www.diybl.com/course/6_system/linux/Linuxjs/20090515/167024.htmlUnix系统通过向内核发出系统调用(system call)实现了用户态进程和硬件设备之间的大部分接口。系统调用是操作系统提供的服务,用户程序通过各种系统调用,来引用内核提供的各种服务,系统调用的执行让用户程序陷入内核,该陷入动作由swi软转载 2011-12-02 20:45:00 · 12955 阅读 · 0 评论 -
Linux进程运行状态图
◆运行状态(TASK_RUNNING)当进程正在被CPU执行,或已经准备就绪随时可由调度程序执行,则称该进程为处于运行状态(running)。进程可以在内核态运行,也可以在用户态运行。当系统资源已经可用时,进程就被唤醒而进入准备运行状态,该状态称为就绪态。这些状态(图中中间一列)在内核中表示方法相同,都被成为处于TASK_RUNNING状态。◆可中断睡眠状态(TASK_INTERRUP原创 2011-12-02 16:46:48 · 8423 阅读 · 0 评论 -
epoll_create, epoll_ctl和epoll_wait & select
转自:http://apps.hi.baidu.com/share/detail/31493129 名词解释:man epoll之后,得到如下结果:NAME epoll - I/O event notification facility SYNOPSIS #include DEscrīptION epoll is a va转载 2011-12-02 22:14:27 · 1441 阅读 · 0 评论 -
ARM Linux 如何--注册和触发--软中断
1. 注册软中断当然是通过open_softirq例子如下:void __init init_timers(void){ int err = timer_cpu_notify(&timers_nb, (unsigned long)CPU_UP_PREPARE, (void *)(long)smp_processor_id()); init_timer_stats(原创 2011-12-12 16:42:18 · 6082 阅读 · 0 评论 -
epoll_create & epoll_ctl & epoll_wait Kernel实现 -- Kernel 3.0.8
1. 相关数据结构#define EPOLLIN 0x00000001#define EPOLLPRI 0x00000002#define EPOLLOUT 0x00000004#define EPOLLERR 0x00000008#define EPOLLHUP 0x00000010#def原创 2011-12-22 17:46:05 · 7552 阅读 · 1 评论 -
Input Core和evdev基本知识 - Kernel3.0.8
1. 基本数据结构和使用示例input_event数据结构如下:struct input_event { struct timeval time; __u16 type; __u16 code; __s32 value;};input_dev数据结构如下:struct input_dev { const char *name; const char *p原创 2011-12-23 16:01:59 · 8746 阅读 · 0 评论 -
嵌入式Linux如何查看硬件设备
查看CPU信息:cat /proc/cpuinfo查看内存信息:cat /proc/meminfo查看USB设备:cat /proc/bus/usb/devices查看键盘和鼠标:cat /proc/bus/input/devices查看各分区使用情况:df查看体系结构:busybox uname -a查看中断信息:cat /proc/interrupts原创 2012-12-19 08:43:31 · 6864 阅读 · 0 评论 -
Linux workqueue工作原理
1. 什么是workqueue Linux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。workqueue是内核中实现简单而有效的机制,他显然简化了内核daemon的创建,方便了用户的编程. 工作队列(workqueue)是另外一种将转载 2012-10-19 17:02:37 · 37550 阅读 · 6 评论