- 博客(20)
- 资源 (51)
- 收藏
- 关注
转载 Linux_2.6内核配置说明
Code maturity level options代码成熟度选项Prompt for development and/or incomplete code/drivers显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择General setup常规设置Local version - append to kernel release
2013-02-28 14:22:37 781
原创 LDD3读书笔记----调试技术
内核编程带有它自己的, 独特的调试挑战性. 内核代码无法轻易地在一个调试器下运行, 也无法轻易的被跟踪, 因为它是一套没有与特定进程相关连的功能的集合. 内核代码错误也特别难以重现, 它们会牵连整个系统与它们一起失效, 从而破坏了大量的能用来追踪错误的证据.内核中的调试支持这里, 我们列出用来开发的内核应当激活的配置选项. 除了另外指出的, 所有的这些选项都在 "kernel hackin
2013-02-28 14:10:20 775
原创 LDD3读书笔记----内存映射
1.Linux 中的内存管理Linux 是, 当然, 一个虚拟内存系统, 意味着用户程序见到的地址不直接对应于硬件使用的物理地址. 虚拟内存引入了一个间接层, 它允许了许多好事情. 有了虚拟内存, 系统重运行的程序可以分配远多于物理上可用的内存; 确实, 即便一个单个进程可拥有一个虚拟地址空间大于系统的物理内存. 虚拟内存也允许程序对进程的地址空间运用多种技巧, 包括映射成员的内存到设备内存.
2013-02-28 13:18:33 777
原创 LDD3读书笔记-----高级字符驱动操作
1. ioctl 接口在用户空间, ioctl 系统调用有下面的原型:int ioctl(int fd, unsigned long cmd, ...); ioctl 驱动方法有和用户空间版本不同的原型:int (*ioctl) (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long ar
2013-02-28 13:17:53 660
原创 LDD3读书笔记------时间, 延时, 和延后工作
测量时间流失使用 jiffies 计数器j = jiffies; /* read the current value */内核输出 4 个帮助函数来转换以 jiffies 表达的时间值, 到和从这些结构:#include unsigned long timespec_to_jiffies(struct timespec *value);void jiffies_to_ti
2013-02-28 10:00:28 764
原创 LDD3读书笔记----中断处理
一个中断不过是一个硬件在它需要处理器的注意时能够发出的信号. Linux 处理中断非常类似它处理用户空间信号的方式. 对大部分来说, 一个驱动只需要为它的设备中断注册一个处理函数, 并且当它们到来时正确处理它们.中断注册int request_irq(unsigned int irq,irqreturn_t (*handler)(int, void *, struct pt_regs *)
2013-02-28 09:01:44 723
转载 start_kernel()函数分析
asmlinkage void __init start_kernel(void) { char * command_line; extern struct kernel_param __start___param[], __stop___param[]; smp_setup_processor_id(); //空
2013-02-27 11:33:56 808
原创 LDD3读书笔记------总线, 设备, 和驱动,类
总线一个总线是处理器和一个或多个设备之间的通道. 为设备模型的目的, 所有的设备都通过一个总线连接。设备模型表示在总线和它们控制的设备之间的实际连接.在 Linux 设备模型中, 一个总线由 bus_type 结构代表, 定义在 . 这个结构看来象:struct bus_type { char *name; struct subsystem subsys; struct k
2013-02-27 11:05:16 638
原创 LDD3读书笔记-----Linux 设备模型
2.6 设备模型2.6 设备模型提供了这个抽象. 现在它用在内核来支持广泛的任务, 包括:电源管理和系统关机 这些需要一个对系统的结构的理解. 例如, 一个 USB 宿主适配器不可能被关闭, 在处理所有的连接到这个适配器的设备之前. 这个设备模型使能了一个按照正确顺序的系统硬件的遍历.与用户空间的通讯 sysfs 虚拟文件系统的实现被紧密地捆绑进设备模型, 并且暴露它所
2013-02-27 10:17:03 671
原创 linux/arch/arm/kernel/head.S
/* * linux/arch/arm/kernel/head.S * * Copyright (C) 1994-2002 Russell King * Copyright (c) 2003 ARM Limited * All Rights Reserved * * This program is free software; you can redistrib
2013-02-26 23:09:32 1280
原创 init 运行级别分析
关于INITinit是Linux系统操作中不可缺少的程序之一。 所谓的init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来
2013-02-25 11:01:29 1946
原创 linux内核常用宏实例总结-----持续更新
/* Force a compilation error if condition is true */#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)])如果条件为真则引起一个编译时错误。使用实例:static int __init spidev_init(void){ int s
2013-02-25 03:10:22 741
原创 LDD3读书笔记----IO端口和IO内存
1.I/O 寄存器和常规内存不管硬件寄存器和内存之间的强相似性, 存取 I/O 寄存器的程序员必须小心避免被 CPU(或者编译器)优化所戏弄, 它可能修改希望的 I/O 行为.I/O 寄存器和 RAM 的主要不同是 I/O 操作有边际效果, 而内存操作没有: 一个内存写的唯一效果是存储一个值到一个位置, 并且一个内存读返回最近写到那里的值. 因为内存存取速度对 CPU 性能是至关重要的,
2013-02-21 13:46:08 827
原创 LDD3读书笔记----分配内存
1. kmalloc 的真实故事kmalloc 分配引擎是一个有力的工具并且容易学习因为它对 malloc 的相似性. 这个函数快(除非它阻塞)并且不清零它获得的内存; 分配的区仍然持有它原来的内容. 分配的区也是在物理内存中连续.kmalloc 原型是:#include void *kmalloc(size_t size, int flags); 给 kmalloc 的
2013-02-21 13:23:59 677
转载 linux中 likely与unlikely
看内核时总遇到if(likely( )){}或是if(unlikely( ))这样的语句,最初不解其意,现在有所了解,所以也想介绍一下。likely() 与 unlikely()是内核(我看的是2.6.22.6版本,2.6的版本应该都有)中定义的两个宏。位于/include/linux/compiler.h中,具体定义如下:#define likely(x) __builtin_e
2013-02-20 11:13:32 579
原创 LDD3读书笔记-----并发和竞争情况
在现代 Linux 系统, 有非常多的并发源, 并且因此而来的可能竞争情况. 多个用户空间进程在运行, 它们可能以令人惊讶的方式组合存取你的代码. SMP 系统能够同时在不同处理器上执行你的代码. 内核代码是可抢占的; 你的驱动代码可能在任何时间失去处理器, 代替它的进程可能也在你的驱动中运行. 设备中断是能够导致你的代码并发执行的异步事件. 内核也提供各种延迟代码执行的机制, 例如 workqu
2013-02-20 10:49:19 636
原创 LDD3读书笔记--字符驱动
字符设备通过文件系统中的名子来存取. 那些名子称为文件系统的特殊文件, 或者设备文件, 或者文件系统的简单结点; 惯例上它们位于 /dev 目录.传统上, 主编号标识设备相连的驱动,次编号被内核用来决定引用哪个设备。现代 Linux 内核允许多个驱动共享主编号, 但是你看到的大部分设备仍然按照一个主编号一个驱动的原则来组织. 依据你的驱动是如何编写的,你可以从内核得到一个你的设备的直接指针,
2013-02-20 09:43:57 619
原创 ashmem.c驱动源码分析
/* mm/ashmem.c**** Anonymous Shared Memory Subsystem, ashmem**** Copyright (C) 2008 Google, Inc.**** Robert Love **** This software is licensed under the terms of the GNU General Publi
2013-02-19 22:40:21 736
原创 LDD3读书笔记--建立和运行模块
1.Hello World 模块#include #include MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){ printk(KERN_ALERT "Hello, world\n"); return 0;}static void hello_exit(vo
2013-02-19 09:33:24 742
原创 LDD3 读书笔记---设备驱动简介
1.1 驱动程序的角色你也可以从不同的角度看你的驱动: 它是一个存在于应用程序和实际设备间的软件层.机制和策略的区分是其中一个在 Unix 设计背后的最好观念. 大部分的编程问题其实可以划分为 2 部分:" 提供什么能力"(机制) 和 "如何使用这些能力"(策略).在编写驱动时, 程序员应当特别注意这个基础的概念: 编写内核代码来存取硬件, 但是不能强加特别的策略给用户, 因为不同的用
2013-02-18 16:00:11 787
rtsp h265 hisi
2022-06-28
链接脚本解析
2017-04-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人