
OS-> Android Hal、内核
文章平均质量分 80
yeqishi
博观而约取,厚积而薄发
展开
-
Android内存管理与泄漏场景分析
前言这次分三篇文章分享Android内存管理与检测的办法,分别是内存管理概要与泄漏的原理,内存泄漏进程定位,内存泄漏进程内部代码段定位。本来还有几项如在lmkd基础上设计的增强型内存管理机制,Native进程泄漏定位方法等,由于涉及到专利部分所以就不公开了。要分享的三篇文章是我在实际项目中使用并不断改善总结的,相信大家看懂之后会有很大用处。目录1. 背景介绍1.1 JVM内存...原创 2019-03-13 10:12:05 · 468 阅读 · 0 评论 -
Linux常用C信号处理函数
alarm(设置信号传送闹钟) 相关函数 signal,sleep<br />表头文件 #include<unistd.h><br />定义函数 unsigned int alarm(unsigned int seconds);<br />函数说明 alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds 为0,则之前设置的闹钟会被取消,并将剩下的时间返回。<br />返回值 返回之前闹钟的剩余秒数,如果之前未设闹钟则返回0。<br />范例 #i转载 2011-02-22 17:08:00 · 692 阅读 · 0 评论 -
第 18 章 TTY 驱动
<br />目录18.1. 一个小 TTY 驱动18.1.1. 结构 struct termios18.2. tty_driver 函数指针18.2.1. open 和 close18.2.2. 数据流18.2.3. 其他缓冲函数18.2.4. 无 read 函数?18.3. TTY 线路设置18.3.1. set_termios 函数18.3.2. tiocmget 和 tiocmset18.4. ioctls 函数18.5. TTY 设备的 proc 和 sysfs 处理18.6. tty_driver转载 2010-11-06 01:36:00 · 915 阅读 · 0 评论 -
uart_get_baud_rate
<br />Nameuart_get_baud_rate -- return baud rate for a particular port Synopsis<br /> <br />unsigned int uart_get_baud_rate (struct uart_port * port, struct termios * termios, struct termios * old, unsigned int min, unsigned int max);<br /> Arguments<br /转载 2010-11-06 22:02:00 · 2561 阅读 · 0 评论 -
ioremap
void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) 入口: phys_addr:要映射的起始的IO地址; size:要映射的空间的大小; flags:要映射的IO空间的和权限有关的标志; void *ioremap(unsigned long phys_addr, unsigned long size) phys_addr:是要映射的物理地址, s转载 2010-11-02 23:54:00 · 671 阅读 · 0 评论 -
Linux中tty、pty、pts的概念区别
<br /><br />基本概念:<br />1> tty(终端设备的统称):<br />tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。<br />终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。<br /><br />2> pty(虚拟终端):<br />但是如果我们远程telnet到主机或使用xterm时不也需要一个终端交互么?转载 2010-10-31 23:17:00 · 693 阅读 · 0 评论 -
深入分析request_irq的dev_id参数作用
<br />request_irq的作用是申请使用IRQ并注册中断处理程序。<br />request_irq()函数的原型如下:<br />/* kernel/irq/manage.c */<br />int request_irq(<br />unsigned int irq,<br /> irqreturn_t (*handler)(int, void *, struct pt_regs *),<br /> unsigned long irqflags, <br /> const c转载 2010-10-31 09:32:00 · 732 阅读 · 0 评论 -
整理Linux下gcc编译中关于头文件与库文件搜索路径相关问题
<br /> 如何指定GCC的默认头文件路径网上偶搜得之,以之为宝:)<br />原地址:http://blog.chinaunix.net/u/28781/showart.php?id=401631<br />===============================================================================在交叉编译的时候我们需要用到其他的库,在config时候可以通过“-I”来指定头文件目录,但是每次都需要设置的话难免有些麻烦,找到一个简单的方转载 2010-10-31 23:15:00 · 991 阅读 · 0 评论 -
UART设备驱动
博主提示:本文作者不详,但内容很有含量,相信对您一定很有帮助!同时感谢作者的奉献!<br /> 尽管一个特定的UART设备驱动完全可以遵循14.2~14.5的方法来设计,即定义tty_driver并实现其中的成员函数,但是Linux已经在文件 serial_core.c中实现了UART设备的通用tty驱动层(姑且称其为串口核心层),这样,UART驱动的主要任务演变成实现serial- core.c中定义的一组uart_xxx接口而非tty_xxx接口,如图14.5所示。<br /> serial转载 2010-10-27 23:53:00 · 4572 阅读 · 0 评论 -
UART设备驱动分析
<br />尽管一个特定的UART设备驱动完全可以遵循14.2~14.5的方法来设计,即定义tty_driver并实现其中的成员函数,但是Linux已经在文件 serial_core.c中实现了UART设备的通用tty驱动层(姑且称其为串口核心层),这样,UART驱动的主要任务演变成实现serial- core.c中定义的一组uart_xxx接口而非tty_xxx接口,如图14.5所示。<br /> serial_core.c串口核心层完全可以被当作14.2~14.5节tty设备驱动的实例,它实现了U转载 2010-10-24 14:43:00 · 1784 阅读 · 0 评论 -
ARM-linux启动的流程
<br />ARM-linux启动的流程----转载<br />下面是我收藏的一篇好文章,就是忘记是那位仁兄,写的了,如果您正好看到这篇文章,请补注您的作者信息<br />------------------------------------<br />首先,porting linux的时候要规划内存影像,如小弟的系统有64m SDRAM, <br />地址从0x 0800 0000 -0x0bff ffff,32m flash,地址从0x0c00 0000-0x0dff ffff. <br />规划如下转载 2010-10-11 22:56:00 · 1329 阅读 · 0 评论 -
嵌入式Linux的串口驱动
<br /> CPU : s3c2410PLAT : 由smdk2410修改来的一块板子。(资料依旧非常有限)<br /> 这次的项目,板子上面串口部分非常怪异。我们知道,samsung s3c2410这款芯片的UART控制器一共可以支持3个串行端口,如果不够用,还可以通过8250之类的芯片来扩展。而我手上的板子却不是这样实现的,它一共设计了7个端口,但是使用的方式比较特殊,port[1]和port[3]~port[6]这5个端口在任意时刻,只有一个有可能会被使用,考虑到这种特殊的使用方式,转载 2010-10-11 23:46:00 · 3638 阅读 · 0 评论 -
I/O内存内存操作
<br />I/O内存内存操作<br />访问寄存器和访问普通的SDRAM是不同的。<br />特殊寄存器在2410上映射在虚拟地址的0xf0000000开始的地方。<br />具体可以参考map.h的定义。<br />#define ioread8(p) ({ unsigned int __v = __raw_readb(p); __v; })<br />#define ioread16(p) ({ unsigned int __v = le16_to_cpu(__raw_readw(p));转载 2010-10-12 00:51:00 · 929 阅读 · 0 评论 -
linux内核的 等待队列 使用方法,wait_queue_head_t,进程休眠
当你在用户空间需要读写一大片数据的时候,这个就用上了。以下来自:http://www.yuanma.org/data/2006/1207/article_1916.htm假设我们在 kernel 里产生一个 buffer,user 可以经由 read,write 等 system call 来读取或写资料到这个 buffer 里。如果有一个 user 写资料到 buffer 时,此时 bu原创 2011-06-11 10:47:00 · 500 阅读 · 0 评论 -
udev与硬件抽象层HAL的实现原理
相对于linux来说,udev还是一个新事物。然而,尽管它03年才出现,尽管它很低调(J),但它无疑已经成为linux下不可或缺的组件了。udev是什么?它是如何实现的?最近研究Linux设备管理时,花了一些时间去研究udev的实现。 udev是什么?u 是指user space,dev是指device,udev是用户空间的设备驱动程序吗?最初我也这样认为,调试内核空间的程序要比调试用原创 2011-06-12 18:34:00 · 997 阅读 · 0 评论 -
linux kernel 工作队列
朋友,你相信,一只蝴蝶在北京拍拍翅膀,将使得纽约几个月后出现比狂风还厉害的龙卷风吗?看过那部经典的影片蝴蝶效应的朋友们一定会说,这不就是蝴蝶效应吗.没错.蝴蝶效应其实是混沌学理论中的一个概念.它是指对初始条件敏感性的一种依赖现象.蝴蝶效应的原因在于蝴蝶翅膀的运动,导致其身边的空气系统发生变化,并引起微弱气流的产生,而微弱气流的产生又会引起它四周空气或其它系统产生相应的变化,由此引起连锁反应,最终导转载 2011-06-13 10:08:00 · 1091 阅读 · 0 评论 -
dump_stack分析与应用
一、dump_stack(堆栈转储)作用:主要用于内核调试,打印内核堆栈段信息。二、使用前便已内核时:使用前,先在内核配置中把kernel debug选上: make menuconfig:kernel hacking-->kernel debug三、arch/x86/kernel/dumpstack.cvoid dump_stack(void){unsigned lo转载 2012-11-06 08:58:32 · 2387 阅读 · 0 评论 -
如何让系统充电时不休眠
现这个功能可以用kernel锁WAKE_LOCK_SUSPEND来实现,如同USB插上的时候上锁了一样dwc_otg_pcd.c wake_lock_init(&pcd->wake_lock, WAKE_LOCK_SUSPEND, "usb_pcd");上锁之后,kernel睡眠时wakelock.c的suspend函数会禁止系统睡眠。注意充电状态结原创 2012-06-08 16:53:13 · 3824 阅读 · 1 评论 -
android 休眠与唤醒II
Android 休眠(suspend)在一个打过android补丁的内核中, state_store()函数会走另外一条路,会进入到request_suspend_state()中, 这个文件在earlysuspend.c中. 这些功能都 是android系统加的, 后面会对earlysuspend和late resume 进行介绍.涉及到的文件:linux_source/kernel转载 2011-12-30 15:48:36 · 1001 阅读 · 0 评论 -
android 睡眠与唤醒I
版本信息Linux Kernel: v2.6.28Android: v2.0对于休眠(suspend)的简单介绍在Linux中,休眠主要分三个主要的步骤:冻结用户态进程和内核态任务调用注册的设备的suspend的回调函数顺序是按照注册顺序休眠核心设备和使CPU进入休眠态冻结进程是内核把进程列表中所有的进程的状态都设置为停止,并且保存下所有进程的上下文. 当这些进程被转载 2011-12-30 15:48:01 · 937 阅读 · 0 评论 -
EXPORT_SYMBOL解析
一个模块mod1中定义一个函数func1;在另外一个模块mod2中定义一个函数func2,func2调用func1。在模块mod1中,EXPORT_SYMBOL(func1);在模块mod2中,extern int func1();就可以在mod2中调用func1了。=================================EXPORT_SYMBOL只出现在2.6内核中转载 2011-11-01 21:34:53 · 856 阅读 · 0 评论 -
Linux 内核的排队自旋锁(FIFO Ticket Spinlock)
引言自旋锁(Spinlock)是一种 Linux 内核中广泛运用的底层同步机制。自旋锁是一种工作于多处理器环境的特殊的锁,在单处理环境中自旋锁的操作被替换为空操作。当某个处理器上的内核执行线程申请自旋锁时,如果锁可用,则获得锁,然后执行临界区操作,最后释放锁;如果锁已被占用,线程并不会转入睡眠状态,而是忙等待该锁,一旦锁被释放,则第一个感知此信息的线程将获得锁。长期以来,人们总是关注于自旋转载 2011-06-27 14:40:00 · 1000 阅读 · 0 评论 -
spinlock简介
前言在 Linux Kernel 里有著许多重要的资料结构,这些资料在操作系统的运作中扮演著举足轻重的角色。然而,Linux 是个多工的操作系统,也就是在同一时间里可以同时有许多的行程在执行,所以,很有可能某个行程在依序读取 inode list,同时却又有另一个在 inode list 里加入新的 inode,这会造成什么情形呢?这会造成 inode list 的不稳定。所以,在 Kernel转载 2011-06-27 11:19:00 · 870 阅读 · 0 评论 -
sysfs方式实现马达驱动
同类资料 : http://www.ibm.com/developerworks/cn/linux/l-proc.html由于对sysfs的概念不是太清楚,只是知道sysfs是一种类似于/proc的虚拟文件系统,可以在用户空间读写sysfs中的相应文件访问或控制内核空间数据,后拜读各类文章后终于对sysfs及平台设备有了更深层次的理解,但读的再多不如亲手一试。恰巧公司需要为android系统提转载 2011-06-22 20:54:00 · 860 阅读 · 0 评论 -
局部性原理
局部性原理: CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。 三种不同类型的局部性: 时间局部性(Temporal Locality):如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。 程序循环、堆栈等是产生时间局部性的原因。 空间局部性(Spatial Locality):在最近的将来将用到的信息很可能与现在正在使用的信息在空间地址上是临近的。 顺序局部性(Order Locality):在典型程序中,除转移类指令外,转载 2011-04-29 23:23:00 · 981 阅读 · 0 评论 -
Linux内核中的atoi,itoa等函数
对于普通应用程序,可以通过包含头文件stdlib.h和stdio.h,string.h等,然后调用需要的itoa(),atoi()等函数,但是对于Linux内核来说,无法使用那些C库中的函数。对此Linux内核里有了相应的实现:对于atoi()用simple_strtol() ,simple_strtoul()等函数替代;对于itoa(),用snprintf()。其他相关函数,自己转载 2011-06-23 16:28:00 · 4651 阅读 · 0 评论 -
等待队列学习笔记
说明一:Namewait_event_timeout — sleep until a condition gets true or a timeout elapses Synopsiswait_event_timeout (wq, condition, timeout);Arguments转载 2011-06-16 17:10:00 · 624 阅读 · 0 评论 -
Linux中Workqueue机制分析
走入Linux的殿堂已经有一年有余了,在这里我想将Linux的各种实现机制分析一遍,一方面对自己来说也是温故而知新,另一方面,促进大家的交流,最好能够给大家一些抛砖引玉的启迪。我是硬件出身,搞硬件已经好多年了,从是专门软件开发也接近两年了,在这一段时间内我越发认为软硬件协同设计是未来发展的主流,软硬件的界限越来越模糊,软硬件的设计思想是相通的,实现方法是各异的,实现的结果上当然也存在较大差别,因此转载 2011-06-13 10:09:00 · 846 阅读 · 0 评论 -
UART控制器驱动流程
<br /><br />UART控制器也属于片上设备,因此它的流程也如其他的片上设备类似,流程可参考《2410下soc上的设备的驱动流程(RTC, watchdog等)》。首先是静态的初始化好这个设备的相关信息,包括中断号,寄存器地址等在arch/arm/mach-s3c2410/devs.c下<br />/* Serial port registrations */<br />static struct resource s3c2410_uart0_resource[] = {<br /> [转载 2010-09-29 16:58:00 · 1377 阅读 · 0 评论 -
EXPORT_SYMBOL and EXPORT_SYMBOL_GPL
1.EXPORT_SYMBOL<br />EXPORT_SYMBOL( my_pub_func);<br />在预编译阶段会解析为:<br />extern void *__crc_my_pub_func __attribute__((weak)); <br />static const unsigned long __kcrctab_my_pub_func __attribute__((__used__)) __attribute__((section("__kcrctab" ""), unused))转载 2010-09-28 22:25:00 · 1163 阅读 · 0 评论 -
linux串口终端设备驱动分析
17.内核启动信息分析 Uncompressing Linux...................................................... done , booting the kernel. [archarmootcompressedmisc.c: decompress_kernel()] Linux ver转载 2010-09-29 14:17:00 · 3061 阅读 · 0 评论 -
linux-2.6 内核模块编程探索
<br />一个LINUX 内核模块编程的手记, 未写完不断更新中…<br />一 相关命令<br />0 查看系统装载了哪些 内核模块<br />lsmod modulename<br />1 加载内核模块<br />insmod modulename<br />2 卸载内核模块<br />rmmod modulename<br />3 创建设备文件<br />mknod filename dev_type major_number minor_number<br />说明: 参数 filename 创建转载 2010-07-22 01:00:00 · 701 阅读 · 0 评论 -
Linux kernel的Makefile和Kconfig
<br />背景知识:<br />背景知识一:Kconfig介绍:<br />在#make menuconfig 时,所显示的Menu list是由各层Kconfig组成的。<br />最底层Kconfig存放在 ~/arch/i386/Kconfig. 以此为头,它会一层层使用source来把需要加入的各个目录中Keconfig添加近来。<br />例如:source "drivers/Kconfig"<br />则将~/drivers/Kconfig添加进Menu list中。<br /><br />背转载 2010-07-18 01:37:00 · 1112 阅读 · 0 评论 -
Linux环境进程间通信(一)
1、 管道概述及相关API应用1.1 管道相关的关键概念管道是Linux支持的最初Unix IPC形式之一,具有以下特点:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自转载 2010-05-20 23:44:00 · 496 阅读 · 0 评论 -
fork函数使用随笔
最近在使用fork函数时,遇到了一些问题,最后通过实验,终于明白了fork的用法,现在分享一下我的 一些体会。 那么,首先看一段代码(fork.c): #include #include #include #include int main () { pid_t pid; int count = 0; pid = for转载 2010-05-18 23:53:00 · 674 阅读 · 0 评论 -
Linux内核参数“vga=”是怎样影响显示模式
若不指定“vga=”参数,系统则不支持framebuffer设备,为什么呢?在内核代码中是如何实现的?查看系统启动日志kern.log发现,指定“vga= ”比不指定多了一下几行:Apr 25 17:14:03 nmr107 kernel: vesafb: framebuffer at 0xd0000000, mapped to 0xe0880000, using 6144k, total 655原创 2010-05-09 08:34:00 · 5170 阅读 · 0 评论 -
linux 2.6同步机制
操作系统的同步机制是老话题了,不过技术的东西放久不用了就容易忘记,在这里就信号量为大家整理一下思绪。 在linux系统中,信号量是一种可以睡眠的锁。如果进程A希望占有一个正在被进程B使用的信号量时,进程A会被推入等待队列,然后睡眠。直到进程B将持有的信号量释放,处于等待队列中的进程A才会被唤醒,并获得信号量。 从信号量的特点所得出的一些结论,如下: 由于等待信号转载 2010-04-16 17:44:00 · 941 阅读 · 0 评论 -
devfs, sysfs, udev文件系统区别
一.>devfs设备文件简略介绍(2.6版本以后内核都采用udev设备文件系统) devfs(设备文件系统)是由2.4内核引入的,具有如下优点: 1.可以通过程序在设备初始化时在/dev目录下创建设备文件,卸载时将它删除。 2.设备驱动程序可以指定设备号,所有者,和权限位,用户空间可以修改所有者和权限位。 3.不再需要为设备驱动程序分配主设备号以及处理的次设备号,在程序可以原创 2010-04-16 01:05:00 · 5612 阅读 · 1 评论 -
进程调度算法
第一部分: 实时调度算法介绍 对于什么是实时系统,POSIX 1003.b作了这样的定义:指系统能够在限定的响应时间内提供所需水平的服务。而一个由Donald Gillies提出的更加为大家接受的定义是:一个实时系统是指计算的正确性不仅取决于程序的逻辑正确性,也取决于结果产生的时间,如果系统的时间约束条件得不到满足,将会发生系统出错。 实时系统根据其对于实时性要求的不同,可以分为软实时和硬实时转载 2010-04-13 07:53:00 · 2623 阅读 · 0 评论 -
Linux内核函数Start_kernel()的功能
//来源不详Start_kernel()中调用了一系列初始化函数,以完成kernel本身的设置。这些动作有的是公共的,有的则是需要配置的才会执行的。 在start_kernel()函数中, 输出Linux版本信息(printk(linux_banner)) 设置与体系结构相关的环境(setup_arch()) 页表结构初始化(paging_init()) 使用"arch/转载 2010-03-29 20:57:00 · 914 阅读 · 0 评论