Linux/kernel/driver开发
颇锐克
Graphics, GPU, device driver,Android Framwork
展开
-
ubuntu 使用 find&grep 查找文件
(2012-10-24 11:31:07)转载▼标签:杂谈分类:Linux每一种操作系统都是由成千上万个不同种类的文件所组成的。其中有系统本身自带的文件,用户自己的文件,还有共享文件等等。我们有时候经常忘记某份文件放在硬盘中的哪个地方。在微软的WINDOWS操作系统中要查找一份文件是相当简单的事情,只要在桌面上点击“开始”-“搜索转载 2015-10-25 10:28:59 · 5362 阅读 · 0 评论 -
Git命令详解
Git命令行配置 1 安装Github 2 安装msysgit 3 要配置用户名和油箱 git config --global user.name 我的命令就是:git config --global user.name mchdbagh git config --global user.email 我的命令就是:git config --global转载 2015-11-25 18:23:24 · 6407 阅读 · 0 评论 -
ARM寻址方式及相关指令汇总
1、寻址方式所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。(1)立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令:[plain] view plaincopyADD R0,R0,#1 ;R0←R0+1 ADD R转载 2015-12-04 09:30:24 · 1000 阅读 · 0 评论 -
linux设备驱动
前言:(总结已经基本写完,这段时间我会从新排版和修正。错误总会有的,望能指正!)前段时间学习了嵌入式驱动,趁着没开始找工作,这段时间我会每天抽出时间来复习。我的总结是根据学习时的笔记(李杨老师授课)、《linux内核设计与实现》第三版、《linux设备驱动程序》第三版和《linux设备驱动开发详解》第一版来归纳的。文章中涉及一些自己的想法,并不能保证所说的一定正确。我也转载 2015-12-23 20:57:58 · 478 阅读 · 0 评论 -
linux 内核编译
linux内核编程4部曲之一:linux内核编译(2.6.12版本)图文解说2012-05-17 00:38:37分类: LINUXlinux内核编程4部曲之一:linux内核编译(2.6.12版本)图文解说linux内核编程4部曲之二:增加linux内核系统调用linux内核编程4部曲之三:修改O(1)调度算法linux内核编程4部曲之四:模块编程转载 2016-03-06 16:20:02 · 368 阅读 · 0 评论 -
linux 内核驱动开发
一、为什么要学习内核?有些人要学习内核,而有些人则可以不学习它。你如果以后要从事系统研发或驱动开发的话,就要学习内核。刚刚接触内核,主要学习内核的接口函数。不要深入的去读内核,因为你读也读不懂,内核代码庞大如野兽一般不可驾驭。学习内核主要掌握层次学习法,即从头开始学习,一环紧扣一环。内核学习的四步学习法:1、核心理论学习-概念与函数原型2、范例程序分析3、思维导图设计4、亲自编写代转载 2016-03-06 16:23:15 · 3656 阅读 · 0 评论 -
uboot 启动流程
看一幅图:1.第一阶段:start.s的内容:点击(此处)折叠或打开#include @该文件是第二步中mkconfig文件执行时创建的。include/config.h #include #include @在include目录下。 /* ******************************************************转载 2016-03-06 16:42:24 · 459 阅读 · 0 评论 -
linux kernel gic 介绍
一、前言GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器,其architecture specification目前有四个版本,V1~V4(V2最多支持8个ARM core,V3/V4支持更多的ARM core,主要用于ARM64服务器系统结构)。目前在ARM官方网站只能下载到Version 2的GIC architecture spec转载 2016-04-19 20:50:53 · 1397 阅读 · 0 评论 -
linux内核的生成过程, vmlinux调试分析
1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息、符号表的最初的内核,大小约23MB; arm-linux-gnu-ld -EL -p --no-undefined -X -o vmlinux -T arch/arm/kernel/vmlinux.lds转载 2016-07-30 17:30:42 · 784 阅读 · 0 评论 -
kernel debug
调试是软件开发过程中一个必不可少的环节,在 Linux 内核开发的过程中也不可避免地会面对如何调试内核的问题。但是,Linux 系统的开发者出于保证内核代码正确性的考虑,不愿意在 Linux 内核源代码树中加入一个调试器。他们认为内核中的调试器会误导开发者,从而引入不良的修正[1].所以对 Linux 内核进行调试一直是个令内核程序员感到棘手的问题,调试工作的艰苦性是内核级的开发区别于用户转载 2016-07-30 17:32:47 · 4204 阅读 · 0 评论 -
uImage、zImage、bzImage、vmlinux区别
在网络中,不少服务器采用的是Linux系统。为了进一步提高服务器的性能,可能需要根 据特定的硬件及需求重新编译Linux内核。编译Linux 内核,需要根据规定的步骤进行,编译内核过程中涉及到几个重要的文件。比如对于RedHat Linux,在/boot目录下有一些与Linux内核有关的文件 . 编译过RedHat Linux内核的人对其中的System.map、vmlinuz、转载 2016-07-31 17:13:48 · 429 阅读 · 0 评论 -
uboot 移植
参考了mobilefzb和赵春江两位大牛的,也研究了2010.06版本的和2011.06版本两个经典版本,也对比了TQ(我买的板是天嵌的)自己写的U-BOOT,学到了不少,也发现了很多东西,以下便记录以下自己的心得吧,以便以后可以自己参考下。 U-BOOT的两个阶段启动过程:(2010.06经典版来说)第一阶段:start.S的路径位于arch\arm\cpu\arm920t\这段汇编转载 2016-07-20 20:36:43 · 348 阅读 · 0 评论 -
Bootloader
我认为学习和应用u-boot对于刚接触的人来说最大的困难在于其功能比较全,文件(.S .c .h makefile文件)非常多,结构也比较复杂,难以理清各方面的关系。熟悉了一段时间之后,发现还是有很多的规律可以总结的。一、首先要理解bootloader的作用,以及U-boot具体可以实现什么样的一些功能。二、弄清U-boot的启动流程,这时候需要跟着整个程序走一遍,先不管实现这个流程的代码转载 2016-07-20 20:45:37 · 10133 阅读 · 0 评论 -
vim ctags 浏览代码
用VIM浏览源代码之跳转到函数/数据类型/变量的定义处1. 先查看是否安装了ctags用which命令检查:# which ctags/usr/bin/which: no ctags in (/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin) // 说明没安装ctags。用rpm命令转载 2016-09-06 10:10:06 · 408 阅读 · 0 评论 -
linux下jiffies定时器和hrtimer高精度定时器
一、jiffies定时器,HZ=100,精度只能达到10ms。注:采用jiffies+msecs_to_jiffies(xx ms);可做到ms级,不过精度不够 #include //DO-->jiffies调用头文件#include //DO-->timer_list结构体static struct timer_list ms_timer;//DO-->定义timer_l转载 2016-09-23 20:30:14 · 2414 阅读 · 0 评论 -
linux设备驱动程序中的阻塞机制
阻塞与非阻塞是设备访问的两种方式。在写阻塞与非阻塞的驱动程序时,经常用到等待队列。一、阻塞与非阻塞 阻塞调用是指调用结果返回之前,当前线程会被挂起,函数只有在得到结果之后才会返回。 非阻塞指不能立刻得到结果之前,该函数不会阻塞当前进程,而会立刻返回。 对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但并不是一一对应的。阻塞对象上可以有非阻塞的调用方式,我们可以通过一定转载 2016-09-25 15:24:05 · 2224 阅读 · 0 评论 -
linux 中C++类的继承
10.1 C++类继承简介C++中类作为一种自定义类型的数据结构,在面向对象程序设计思想中有着相当重要的作用。类代表一类事物的集合,与现实社会相似,类类型同样具有继承实现的可能。现实社会中事物的继承性随处可见,如父子的继承关系等。C++软件开发中,继承机制有着很多的运用。通常在软件编程中,继承与多态性的结合运用可以增加软件的扩展性以及应用程序可重用性。C++语言中将继承分为三种情况,即pu转载 2016-10-24 19:35:54 · 1700 阅读 · 0 评论 -
虚函数、虚基类、抽象类
一:虚基类解决二义性,防止双份拷贝间接基类。(否则得用作用域分辨符来区分进行的多个拷贝)将共同基类设置为虚函数,这是从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。虚基类的声明是在派生类的定义过程中进行的,语法形式为:class 派生类名:virtual继承方式 基类名虚基类及派生类的构造函数,例如:#includeusingnam转载 2016-10-24 19:43:29 · 3086 阅读 · 0 评论 -
linux 常用命令
Linux的bg和fg命令 我们都知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务。而不能让程序在前台后台之间切换。而 Linux 提供了 fg 和 bg 命令,让我们轻松调度正在运行的任务。 www.2cto.com 假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctrl-Z ,挂起这个程序,然后可以看转载 2016-09-22 17:08:42 · 2703 阅读 · 1 评论 -
ubuntu 上source 、sh 、bash和。/脚本运行区别
ubuntu下source、sh、bash、./执行脚本的区别1.source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限" 注:该命令通常用命令“.”来替代。 如:source .bash_profile . .bash_profile两转载 2016-10-25 19:57:57 · 452 阅读 · 0 评论 -
shell read脚本输出参数
1. Read的一些选项 Read可以带有-a, -d, -e, -n, -p, -r, -t, 和 -s八个选项。-a :将内容读入到数值中echo -n "Input muliple values into an array:"read -a arrayecho "get ${#array[@]} values in array"-d :表示delimite转载 2016-10-25 20:21:01 · 2245 阅读 · 0 评论 -
Kmalloc Vmalloc alloc 之间的关系
简单的说:kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存 kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续,malloc不保证任何东西(这点是自己猜测的,不一定正确)kmalloc能分配的大小有限,vmalloc和malloc能分配的大小相对较大 内存只有在要被DMA访问的时候才需要物理上连续 vmalloc转载 2016-10-02 09:50:29 · 383 阅读 · 0 评论 -
逻辑地址、线性地址和物理地址的关系
、首先不得不提的历史 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还有用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序转载 2016-10-02 10:03:42 · 26362 阅读 · 4 评论 -
tar.gz 解压出现 tar :This does not look like a tar archive 解决
在安装maven时,使用tar 命令解压maven.tar.gz出现:tar :This does not look like a tar archivetar: Exiting with failure status due to previous errors如图:解决的办法:# gzip -d ***.tar.gz# tar -xf ***.tar.gz原创 2016-10-02 13:57:46 · 42304 阅读 · 1 评论 -
ashmem
ashmem是android的内存分配/共享机制,在dev目录下对应的设备是/dev/ashmem,相比于传统的内存分配机制,如malloc、anonymous/namedmmap,其好处是提供了辅助内核内存回收算法的pin/unpin机制。ashmme的典型用法是先打开设备文件,然后做mmap映射。第一步通过调用ashmem_create_region函数,这个函数完成这几件事:转载 2016-10-02 16:31:49 · 2115 阅读 · 0 评论 -
linux内存管理mmap详情
Linux内存管理之mmap详解 一. mmap系统调用 1. mmap系统调用 mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。当使用mmap映射文件到进程后,就可以直接操作这段虚拟地址进行文件的读写等操作,不必再调用read,wr转载 2016-10-03 11:21:47 · 591 阅读 · 1 评论 -
ioctrl 详解
.ioctl的实现 一、ioctl的简介:虽然在文件操作结构体"struct file_operations"中有很多对应的设备操作函数,但是有些命令是实在找不到对应的操作函数。如CD-ROM的驱动,想要一个弹出光驱的操作,这种操作并不是所有的字符设备都需要的,所以文件操作结构体也不会有对应的函数操作。 出于这样的原因,ioctl就有它的用处了————一些没办法归类的函转载 2016-10-03 14:59:01 · 4740 阅读 · 0 评论 -
Linux内核中ioremap映射的透彻理解
几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I/O映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的IN和O转载 2016-10-05 19:50:39 · 469 阅读 · 0 评论 -
debugfx
DebugFS,顾名思义,是一种用于内核调试的虚拟文件系统,内核开发者通过debugfs和用户空间交换数据。类似的虚拟文件系统还有procfs和sysfs等,这几种虚拟文件系统都并不实际存储在硬盘上,而是Linux内核运行起来后才建立起来。通常情况下,最常用的内核调试手段是printk。但printk并不是所有情况都好用,比如打印的数据可能过多,我们真正关心的数据在大量的输出里不是那么一目了然转载 2016-10-07 14:03:43 · 316 阅读 · 0 评论 -
内存 tunning
adb shell dumpsys procstats原创 2016-11-17 15:11:38 · 406 阅读 · 0 评论 -
android 反汇编
在obj/KERNEL目录下直接执行下面命令,arm-eabi-objdump -l -d vmlinux > asm原创 2017-03-14 20:49:16 · 721 阅读 · 0 评论 -
基于user 版本pac 定制kernel 内核
领到一部Samsung Galaxy Nexus手机用来折腾,没有这个手机的工程文件包。直接从google的android网站找到4.2.1的映像文件覆盖之,然后root之。再去下载了kernel代码,根据折腾的需要编辑了.config。考虑到以后可能经常需要折腾这个内核的源代码,我得找到一个简单的方法来让这部手机接受我的折腾,我不改动除linux kernel外其他部分。下面是过程流水帐:转载 2017-04-10 12:59:06 · 715 阅读 · 0 评论 -
Linux电源管理(11)_Runtime PM之功能描述
1. 前言 终于可以写Runtime PM(后面简称RPM)了,说实话,蜗蜗有点小激动。因为从个人的角度讲,我很推崇使用RPM进行日常的动态电源管理,而不是suspend机制。软件工程的基本思想就是模块化:高内聚和低耦合。通俗地讲呢,就是“各人自扫门前雪”,尽量扫好自己的(高内聚),尽量不和别人交互(低耦合)。而RPM正体现了这一思想:每个设备(包括CPU)都处理好自身的电源管理工作,转载 2017-04-06 19:41:38 · 366 阅读 · 0 评论 -
android init 进程分析
本文使用的软件版本Android:4.2.2Linux内核:3.1.10 本文及后续几篇文章将对Android的初始化(init)过程进行详细地、剥丝抽茧式地分析,并且在其中穿插了大量的知识,希望对读者了解Android的启动过程又所帮助。本章主要介绍了与硬件相关初始化文件名的确定以及属性服务的原理和实现。 Android本质上就是一个基于Linux内核的操作系统。转载 2017-06-16 11:13:09 · 387 阅读 · 0 评论 -
Android运行时ART执行类方法的过程分析
在前面一篇文章中,我们分析了ART运行时加载类以及查找其方法的过程。一旦找到了目标类方法,我们就可以获得它的DEX字节码或者本地机器指令,这样就可以对它进行执行了。在ART运行时中,类方法的执行方式有两种。一种是像Dalvik虚拟机一样,将其DEX字节码交给解释器执行;另一种则是直接将其本地机器指令交给CPU执行。在本文中,我们就将通过分析ART运行时执行类方法的过程来理解ART运行时的运行原理。转载 2017-06-16 11:15:57 · 2160 阅读 · 0 评论 -
Android ota 升级
Android OTA升级原理和流程分析(一)--update.zip包的制作转载自:http://blog.chinaunix.net/uid-22028566-id-3533848.html 这篇及以后的篇幅将通过分析update.zip包在具体Android系统升级的过程,来理解android系统中Recovery模式服务的工作原理。我们先转载 2017-06-16 13:48:56 · 1202 阅读 · 0 评论 -
Android Recovery:功能简介。Recovery模式介绍
Android Recovery Theoryandroid Recovery:功能简介Android支持Recovery模式。在某些操作之后,系统会自动重启并进入到Recovery模式,用户按组合键开机(HOME+POWER),也可进入Recovery模式。该模式提供如下功能:1、擦除用户数据恢复系统到出厂模式,即擦除用户数据和缓存数据。2、系统升级系统升级的概念比较广,转载 2017-06-16 14:47:40 · 4234 阅读 · 0 评论 -
DMABUF, DMA mapping,IOMMU的区别
1. DMABUF can be used as a wrapperto encapsulate other memory management frameworks. All these memory managementframework(I mean mostly for graphics), buffer is the keypoint. DMABUF defines astandard转载 2017-06-06 09:39:00 · 3326 阅读 · 0 评论 -
PAGE_ALIGN()
将物理地址addr修整为页边界地址(页的上边界)#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) |------------|PAGE_ALGN(addr) | | | | |转载 2017-06-17 10:40:16 · 2616 阅读 · 0 评论 -
list_for_each_entry
http://blog.sina.com.cn/s/blog_5e99b41e0100rxgf.htmlhttp://hi.baidu.com/shiftedmind/blog/item/1a7c8381e6a67fa56d8119da.html 在Linux内核源码中,经常要对链表进行操作,其中一个很重要的宏是list_for_each_entry:意思大体如下:转载 2017-06-17 11:02:21 · 552 阅读 · 0 评论