- 博客(37)
- 收藏
- 关注
原创 Android7.0 init进程分析
init进程int main(int argc, char** argv) {if (!strcmp(basename(argv[0]), "ueventd")) {return ueventd_main(argc, argv);//这里比较当前进程是不是ueventd,因为init本身也是ueventd进程, //ueventd进程的工作是负责设备节点创建和权限设定}
2017-09-05 17:25:58
661
原创 Android关机流程
PowerManager 源码:frameworks/base/core/java/android/os/PowerManager.java public void reboot(String reason) { try { mService.reboot(false, reason, true); } catch (RemoteEx
2017-09-01 20:47:48
1701
原创 android开机动画bootanimation
android开机动画bootanimationbootanim服务源码:frameworks/base/cmds/bootanimation/bootanim.rcservice bootanim /system/bin/bootanimationclass coreuser graphicsgroup graphics audiodisabledones
2017-09-01 20:33:20
7706
原创 git stash 暂存信息
作用:将工作区内容暂存起来应用场合:当在需要紧急处理一个bug时,工作区内容又没有完成,不适合提交,想暂存起来。git stash 对当前的暂存区和工作区状态进行保存git stash list 列出所有保存的进度列表git stash pop --index stash@{0} 恢复工作进度git stash save “这是保存进度” 该命令可以添加保存信息
2016-08-10 23:01:03
595
原创 本地和远程版本库之间协作
1. 添加远程版本库git remote add origin git@github.com:kismit/GitTest.gitorigin:远程版本库在本地的命名git@github.com:kismit/GitTest.git :远程版本库的地址也可以使用http地址git remote add originhttps://github.com/kismi
2016-08-10 23:00:12
391
原创 git偷懒 -- 别名
git config --global alias.co checkoutgit config --global alias.br branchgit config --global alias.ci commitgit config --global alias.st status例子:以后可以直接使用git co 代替 git checkout,快很多查看最
2016-08-10 22:59:23
269
原创 git reset 版本回退
git reset [--hard|soft|mixed|merge|keep] [或HEAD]A). --hard:重设(reset) index和working directory,自从以来在working directory中的任何改变都被丢弃,并把HEAD指向。B). --soft:index和working directory中的内容不作任何改变,仅仅把HEAD指
2016-08-10 22:58:47
394
原创 git学习
一. git安装sudo apt-get install gitsudo apt-get install git-doc git-svn git-emain git-gui gitk如果是第一次使用git,需要添加以下信息:git config --global user.name "kismit" 用户名git config --global user.email "
2016-08-10 22:57:57
261
原创 platform_driver平台设备驱动模型
一。平台设备 platform_device结构struct platform_device {const char * name; /*平台设备的名字,与驱动的名字对应*/int id; /*一般为-1*/struct device dev; /*设备结构,platform_device 派生于device*/u32 num_resources; /*设备使用的资
2016-07-21 17:16:23
517
原创 中断分层
一。中断部分1.中断申请函数 request_irqint request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev)输入参数:中断号 中断处理函数 中断类型 设备名字 返回给中断处理函数的设备号成功返回0 失败返回错误代码
2016-07-21 17:15:09
356
转载 定时器timer
1.定义一个timer,定时器中断函数funstruct timer_list timer;void fun();2.先初始化timerinit_timer(&timer);then 对timer的相关参数赋值:timer.function = fun;timer.expires = jiffies + TIMER_DELAY;3.注册定时器ad
2016-07-21 17:14:13
380
原创 设备驱动模型:总线bus_type 设备device 驱动driver
一.总线 bus_type数据结构struct bus_type{const char *name; //总线类型的名称struct bus_attribute *bus_attrs;struct device_attribute *dev_atrrs;struct driver_attribute *drv_attrs;int (*match) (stru
2016-07-14 16:13:34
1112
原创 开发板开发环境搭建基本流程
1.烧写sd卡(win下使用sd卡烧写工具,win7下要format),将uboot文件烧到sd卡中2.sd卡启动,按下空格进入菜单界面,首先选择1 , y 回车 ,格式化nandflash ,然后选择3烧写镜像,选择1烧写uboot ,在虚拟机中通过dnw烧写uboot补充dnw使用方法:insmod dnw_usb.ko
2016-07-13 17:32:46
1688
原创 Linux QT环境的搭建
1.工具:qt-creator-opensource-linux-x86-3.2.1.run libstdc++.so.6.0.17放在我的网盘 RedHat Qt安装工具中2.安装步骤:先查看 linux 内核的版本 uname -a 我的版本的x86的,所以使用qt-creator-opensource-linux-x86-3.2.1.run
2016-07-13 17:30:18
488
原创 RedHat上Qt环境安装和配置
环境:redhat6.3源码:飞凌提供的qt-everywhere-opensource-src-4.7.1.tar.gzqt-creator-linux-x86-opensource-2.6.1.bin(qter下载的,不要选择太高的版本,因为高版本运行时占用的内存比较大,一般运行会出问题)将qt-everywhere-opensource-src-4.7
2016-07-13 17:28:17
5252
原创 OK6410 Qt4.7.1移植
环境:redhat6.3 源码:飞凌提供的qt-everywhere-opensource-src-4.7.1.tar.gz经过前面qt4.4.3的移植后,移植4.7.1比较顺利,移植步骤如下:将源码放在某个目录下(没有特别要求)解压源码tar xvzf qt-everywhere-opensource-src-4.7.1.tar.g
2016-07-13 17:25:53
583
原创 OK6410 Qtopia4.4.3和tslib的移植
实验环境:RedHat6.4(国嵌提供)用到的源码,工具:tslib.tar.gzARM-qt-extended-opensource-src-4.4.3.tar.gz说明:其实qt移植说白了就是移植一个tslib库和一个qt库,tslib的作用是触屏相关的,而qt库是运行qt程序时候需要调用的一些动态库文件。飞凌给的qt移植教程
2016-07-13 17:24:21
838
原创 中断与时钟机制
一.中断 IRQ中断安装与释放1.申请中断线int request_irq(unsigned int irq,irq_handler_t handler,unsigned long irqflags,const char *devname,void *dev_id) 中断号 中断处理函数 中断触发方式 设备名称 共用中断信号线时使用到(一般设备为NULL)一般在init函数中设置
2016-07-13 17:21:24
562
原创 printk 消息打印级别
KERN_EMERG 紧急消息,常常是那些崩溃前的消息KERN_ALTER 需要立即动作的情形KERN_CRIT 严重情况,常常与严重的硬件或者软件失效有关KERN_ERR 报告错误使用,常用于报告硬件故障KERN_WARNING 有问题的警告,这些情况自己不会引起系统的严重问题KERN_NOTICE 正常情况,警告一些安全情况
2016-07-13 17:20:26
346
原创 阻塞和非阻塞
1. 非阻塞non-block --selectint select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout)参数:最大fd 可读 可写 异常 超时超时参数:秒 微妙struct timeval{ long tv_sec;long tv
2016-07-13 17:19:03
435
原创 完成量:线程同步
作用:一个线程发送信号通知另一个线程开始执行某个任务#include struct completion{unsigned int done;wait_queue_head_t wait;}done 0:等待 >0:可执行wait 等待队列定义和初始化完成量定义struct completion com;初始化init
2016-07-13 17:16:52
314
原创 锁机制:自旋锁spinlock和信号量semaphore
作用:避免竞争一. 自旋锁使用步骤:1.定义自旋锁spinklock_t lock;2.初始化自旋锁spin_lock_init(&lock);3.获得自旋锁spin_lock(&lock);4.释放自旋锁spin_unlock(&lock);spin_lock [如果获得lock则立即返回,否则将自旋在那里直到其他线程释放]临界资源
2016-07-13 17:15:39
1705
原创 file_operation
struct file_operations ***_ops={ .owner = THIS_MODULE, .llseek = ***_llseek, .read = ***_read, .write = ***_write, .ioctl = ***_ioctl, .open = ***_open, .release = ***_release, }
2016-07-13 17:13:37
264
转载 信号量与锁的差别
信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在 哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这 个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”也就是
2016-04-15 19:46:00
603
原创 ++ --运算符
(++i)+(++i)+(++i)错误结果:15正确的结果:编译器处理方式1:++i=4 ++i=5 ++i=66+6+6 = 18处理方式2:++i=4 ++i=55+5+(++i)=5+5+6 = 16 (gcc、g++编译器的结果)并没有标准结果,具体情况由编译器决定,这是C的灰色地带。int x;int
2016-04-11 22:20:24
375
原创 关键概念
数据元素:组成数据的基本单位数据项:一个数据元素由若干个数据项组成数据对象:性质相同的数据元素的集合逻辑结构:集合结构-数据元素之间没有特别的关系线性结构-数据元素之间一一对应树形结构-数据元素之间存在一对多关系图形结构-数据元素之间是多对多的关系物理结构顺序存储结构--将数据存储在地址
2016-04-11 21:46:45
401
原创 驱动模板
#include#include#include#include#includeMODULE_LICENSE("GPL"); //声明本驱动遵循GPL协议/*加载模块*/static int XXX_init() { return 0;}/*卸载模块*/static void XXX_exit(){
2016-04-11 21:45:20
361
原创 操作符重载
操作符重载本质也就是函数调用而已!#include #include using namespace std;struct Complex{ int a;//实部 int b;//虚部 };/*Complex add(Complex c1,Complex c2){ Complex c;
2016-04-11 21:44:21
271
原创 接续符和转义符
接续符‘\’是编译器的指示符指示这一行尚未结束,下一行接着上一行。#define \SW\AP(a,b) \{ \ int\ temp = a; \ a\ = b; \ b = te\mp; \}//这是\注释宏代码块定义:定义一个代码
2016-03-15 23:05:34
379
原创 内联函数
//宏定义函数 #define func1(a,b) (a>b?a:b)这种宏定义方法是直接代码替换方式的/*内联函数*/inline int func(int a,int b){ return a>b?a:b;}内联函数类似于宏定义,在编译器中是没有函数声明的,是将函数体直接插入调用的地方,没有标准开销,但是不是说所有函数都是可以转化为内
2016-03-13 22:00:07
511
转载 交叉编译工具链安装
平台:pc(笔者使用虚拟机vmware) 系统:redhat6 / ubuntu版本:4.3.2tar xvzf arm-linux-gcc-4.3.2.tgz -C/注意这里使用的是默认解压路径,默认是解压到/usr/local/arm目录下如果需要制定安装路径的,只需要在-C后面跟上具体路径即可设置环境变量:vi /etc/profile在p
2016-03-13 14:40:42
357
原创 消息队列与通信
1.打开或创建消息队列int msgget(key_t key,int msgflg)成功:返回消息对列失败:-1标志: IPC_CREAT创建新的消息队列,没有与key对应的消息队列的情况下才创建消息队列的格式struct msgbuf消息的类型 long mtype消息数据 char mtext[1]2.发送消息到消
2016-03-09 22:49:12
271
原创 sizeof const volatile
sizeof是编译器内置的关键字,不是函数,用于计算相应实体所占内存的大小,在编译期间就可以确定。sizeof a 等价于 sizeof(a)const修饰的变量是只读变量,告诉编译器不可以对该变量进行赋值操作,但在程序运行过程中还是可以改变的。const变量在内存中是占据空间的!const int cc =1;
2016-03-09 11:39:30
339
原创 goto void
goto破坏过程式程序设计的规则基本不用!void关键字:修饰返回值和参数为了表示“无”void并不是表示内存大小的别名,C语言中并没有void标准类型的void只是定义为表示“无”类型,并没有定义其表示空间的大小,其表示空间的大小是由编译器定义的gcc编译器中:sizeof(void) ==1
2016-03-09 11:17:46
383
原创 auto,static,register分析(属性关键字)
变量的修饰符auto是C语言的默认属性,是在程序栈分配空间的static定义静态变量,实在程序静态区分配空间,修饰函数时表示全局变量,只是在同一个文件中是全局的,在其他文件中并不是全局的。register定义的变量是存储在寄存器中的,变量必须是CPU寄存器可以接受的值,不一定能够分配,因为是寄存器变量不在内存中分配空间所以不能使用&运算符
2016-03-09 11:14:07
360
原创 bool if float
标准C语言中是没有标准的bool类型的,bool由编译器制定,所以不同的编译器true或false不一定一样bool类型的实际变量实际是枚举变量typedef enum{ true = 1 , false = 0}bool;条件只判断是0还是非0if(-1)也是成立
2016-03-09 11:09:39
480
原创 enum define typedef
enum Color{ GREEN, //这里GREEN默认为0 RED = 2, BLUE //BLUE = 3 };enum取值只能是整数,不能是float默认值是0开始的#define 宏常量变量只是简单的替换,枚举变量是真正意义上的常量define定义的
2016-03-09 11:04:08
301
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人