- 博客(57)
- 资源 (13)
- 收藏
- 关注
原创 android6.0 init进程main之prop
android6.0 init进程main之prop 对应代码 android6.0_r72,kernel 对应 linux3.18前言init 进程系统属性初始化,属性导入 和 属性服务 :property_load_boot_defaults();start_property_service();涉及文件// system/core/init/property_service.cpp// system/core/init/init.cpp/system/core/init/I
2021-10-11 13:38:00 514
原创 android6.0 init进程main之epoll
android6.0 init进程main之epoll 对应代码android6.0_r72,kernel对应linux3.18前言init 进程监听 初始化,epoll 及 signal_handler_init涉及文件/system/core/init/Init.cpp/system/core/init/signal_handler.cppinit 进程 epoll 监听功能init进程 epoll 整体代码结构如下:// /system/core/init/Init.cpp
2021-08-24 21:02:20 260
原创 android6.0 init进程main之selinux_initialize
android6.0 init进程main之selinux_initialize 对应代码android6.0_r72,kernel对应linux3.18前言selinux 的初始化 selinux_initialize涉及文件/system/core/init/Init.cpp/external/libselinux/callbacks.c/system/core/init/log.cpp/system/core/init/Android.mk/external/libseli
2021-08-23 17:36:43 416
原创 android6.0 init进程main之klog
android6.0 init进程main之klog 对应代码android6.0_r72,kernel对应linux3.18前言klog_init();klog_set_level(KLOG_NOTICE_LEVEL);涉及文件/system/core/init/Init.cpp/system/core/libcutils/Klog.cmain()如下代码,直接注释说明其各个部分内容。klog_init()打开(创建文件) /dev/kmsg ,将文件句柄记录在 klog_
2021-08-23 12:40:59 666
原创 android6.0 启动流程总览
android6.0 启动流程总览Android系统的启动流程总体上是先启动BootLoader,再启动kernel,最后启动android。Android启动总览图BootLoader层BootLoader层启动有以下任务:当电源供电是将自身加在到RAM中,执行相应的初始化任务;加载linux内核,并引导linux内核启动。kernel层BootLoader 启动 kernel 的 swapper进程,进程ID为0,是内核的第一个进程,此进程初始化系统的各个硬件及kernel系统管理模块
2021-07-25 16:51:33 240 1
原创 android6.0 init进程启动前传
未写文章列表android6.0 init进程启动前世前言linux内核启动 head.Sstart_kerneljava为什么能实现单一原则插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入android6.0 init进程启动前世对应代码android6.0_r72,kernel对应l
2021-07-25 15:36:13 162
原创 do_fork函数
do_fork函数在内核中创建并执行新的程序的各种系统调用最终都是调用了do_fork来实现进程的创建。asmlinkage int sys_fork(unsigned long r4, unsigned long r5, unsigned long r6, unsigned long r7, struct pt_regs __regs){#ifdef CONFIG_MMU struct pt_regs *regs = RELOC_HIDE(&
2021-07-25 15:19:53 828
原创 start_kernel初始化
start_kernel 函数主要初始化 linux 系统各个功能子系统,然后进入 kernel 的下一步启动函数 rest_init(),下面简单说一下函数内部相关的初始化,有个初步的了解。详细内容来自https://www.cnblogs.com/lifexy/p/7366782.html仅做学习记录asmlinkage void __init start_kernel(void) { char * command_line; extern struct kernel_p...
2021-07-25 13:03:17 374
原创 android anr 产生的类型及原因
android anr 产生的条件android 系统中anr的本质是主线程无法响应。而导致主线程无法响应的原因大致如下:主线程请求网络资源,数据库访问或者io访问,这些操作都是耗时操作,主线程处于阻塞状态,如果超时等待,会发生anr; cpu处于饥饿状态,无法让主线程运行,导致anr; 其他进程或者线程占用cpu资源,无法释放资源让该主线程运行,导致anr; 死锁,即主线程等待的锁...
2019-02-28 16:01:57 3584
原创 android anr 产生的条件
android anr 感知一般地,ANR的产生需要同时满足三个条件:1、主线程方面:只有应用程序进程的主线程(即:UI线程)响应超时才会产生ANR;UI线程时与用户进行交互的线程,如果它在阻塞或者长时间在处理某个人物无法让用户进行下一步交互操作,感知上就是这程序怎么卡死了,体验很差,故而其需要一定的超时提醒,也就是ANR的提醒;而子线程的阻塞或者缓慢只要不影响主线程的人机交互就没必...
2019-02-28 09:48:19 1052
原创 android anr 感知
ANR(Application Not Responding)定义从初始认识来说,在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。当用户点击了“等待”,对话框消失程序会继续运行,直到下一个周期如...
2019-02-28 09:47:56 226
原创 android广播机制概述
Android系统在运行的过程中,会产生很多事件,比如开机、电量改变、收发短信、拨打电话、屏幕解锁Android:系统在产生某个事件时发送相应的广播,应用程序或系统服务等使用广播接收者接收这个广播,就知道系统产生了什么事件。package com.example.administrator.broadcastdemo;import android.content.BroadcastRe...
2019-02-28 09:46:52 350
原创 shell脚本中修改文件的内容
1、修改某文件中的内容:将oldstring修改为newstring sed -i "s/oldstring/newstring/g" test.txt 如果将oldstringXXX修改为newstring: sed -i "s/oldstring*/newstring/g" test.txt2、将某个目录中所有还有oldstring字符串的文件中的old
2016-05-13 13:37:26 16335
原创 17、责任链模式(ChainofResponsibility)
概念:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。main(),客户IWomen,发出请求者接口Women,请求者实现类Handler,处理请求抽象类Father,处理请求实现类,责任链之一Husband,处理请求实现类,责任链之二Son,处理请求实现类,责任链之三
2016-04-18 15:35:25 259
原创 16、观察者模式(Observer)
观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。main(),IObservable,被观察者接口CHanFeiZiObservable,被观察者韩非子IObserver,观察者接口CLiSiObserver,观察者李斯CZhouSiObserver观察者周斯说明:将观察者聚集到被观察者韩非子身边,韩非
2016-04-18 15:34:10 442
原创 15、组合模式(Composite)
组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合的使用具有一致性。main(),客户CCorpNode,抽象基类,实现基本信息CBranchNode,树枝节点,实现Addordinate()函数和GetSubordinate()函数CLeafNode,叶子节点,IsLeaf属性总是“true”说明:组合模式主要是实现在CB
2016-04-18 15:32:36 246
原创 14、迭代器模式(Iterator)
迭代器模式:宗旨提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。迭代器模式的本质就是迭代器,其实迭代器模式就是用迭代器来实现对元素(类或者变量等)的管理。图示: Project 类
2016-04-11 19:14:49 287
原创 13、装饰模式(Decorator)
装饰模式,动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。假设张三的家长要查看张三的成绩,那么要通过学校成绩报告来查询,那么我们现在设定一下成绩报告。首先有成绩单类ISchoolReport(ISchoolReport时最终的数据来源模板,ISchoolReport基类模板) 基类可以查看整体报告,可以通过姓名查看个人成绩。每个年级的
2016-04-11 18:00:55 205
原创 12、命令模式(command)
原始工作流程:命令人 找甲 让其做甲A--》甲B--》甲D (完成1任务) 找乙 让其做乙A--》乙C--》乙E (完成2任务) 找丙 让其做丙A--》丙C--》丙D (完成3任务)命令模式工作流程:(将每个任务封装成一个命令类
2016-04-11 17:57:53 256
原创 activitymanagerservice启动
ActivityManagerService(简称AMS)ActivityManagerNative(简称AMN)WindowManagerService(简称WMS)**********************************************************************************************************
2015-11-12 11:15:41 511
原创 ubuntu linux ssh 自动输入密码
ubuntu linux ssh 自动输入密码第一种方法,直接使用expect脚本:#!/usr/bin/expect -f spawn ssh myname@192.168.1.5 expect "assword" set timeout 300 send "mypassword\r" interact注意:
2015-11-12 10:22:46 2779
原创 安装ubuntu基本开发环境
********************************安装ubuntu基本开发环境 ********************************build-essential 指的是编译程序必须的软件包。查看该软件包的依赖关系,可以看到以下内容: $ apt-cache depends build-essential build-essen
2015-11-10 10:47:32 843
转载 linux利用patch和diff命令制作文件补丁
linux利用patch和diff命令制作文件补丁 因为在 u-boot 移植过程中,有几处通用文件要修改,如果每次都要手动修改就太麻烦了。制作补丁可以解决这个问题。学习资料的收集比较简单,方法一类似于这种初级问题网上资料非常丰富, google 或者 baidu 搜索一下,然后选择有价值的资料,方法二是阅读 man 在线文档。完成收集工作,当然最终要在自己的Linux 上
2015-11-10 10:37:01 282
原创 10、建造者模式(Builder)
要生产一个可以带有设置某些属性的对象,可以直接产生,可以定义一个创建者,其提供设置接口函数,并提供对象获取接口,将某一类产品封装起来,后面需要此产品时只需要调用创建者的创建接口就可以了。另外可以进一步对创建者进行封装,将其封装成一个可以有多个预订设置的类(Director),这个类的每一个预订设置都提供一个创建接口,这样需要某个预订设置产品时只需要调用对应的接口就可以了。main(
2015-10-14 15:16:51 317
原创 9、模板方法模式(TemplateMethod)
模板方法模式其实就是有一个带有虚函数的基类,其实现了相关算法,其算法中包含了虚函数,因为这些函数需要子类来实现所以在基类中以虚函数呈现,以保证算法的正常编译。当实现了子类之后在使用时使用基类的指针指向子类,这样调用接口也一致。如汽车模型中有一下方法: void Run();protected: virtual void Start() = 0; virtual
2015-10-14 14:59:23 273
原创 8、适配器(Adapter)
其核心情况是,main的运行需要使用interface_need类接口,但是新的系统不能提供interface_need接口,不过有另一套接口interface_now类,interface_now可以完全实现interface_need接口的功能,那么将interface_now类接口转换成interface_need类接口形式。interface_need有一下几个接口:
2015-10-14 14:58:26 303
原创 类的静态成员能用来干嘛
对象数目控制一个类最多只能有一个对象存在于系统中,如何实现?(单例模式)(插入14-3.cpp)无状态函数和状态函数 无状态函数:函数的调用结果只与实参相关状态函数:函数的调用结果不仅与实参值相关而且还与之前的函数调用有关。(插入14-4.cpp)代码中两种函数实现的问题:fib1是以无状态函数的方式实现的,求解数列每一项时都会做重复的循环,时间复杂度
2015-10-14 14:39:18 503
原创 编译器对构造函数的调用
三种不同类的初始化方式 Test t1(5); //标准初始化方式Test t2 = 5; //拷贝构造函数 // 给Test(int i)前加explicit会报错Test t3 = test(5); //手动调用构造函数 //给Test(const Test& obj)前加explicit会报错在现代的编译器中这三种初始化方式是等价的。 C++
2015-10-14 14:38:10 519
原创 malloc与free和new与delete有什么区别
malloc函数的返回值是void* 其所申请的空间需要强制类型转换。 malloc和free是库函数,是以字节为单位申请堆空间 new和delete是关键字,是以类型为单位申请堆空间 malloc和free单纯的对内存进行申请个释放 对于基本类型new关键字会对内存进行初始化 对于类类型new和delete还负责构造函数和析构函数的调用。 具体
2015-10-07 11:31:43 280
原创 十二、 操作符重载
使用C++标准库 C++标准库并不是C++语言的一部分 C++标准库是由C++语言编写而成的类库和函数的集合 C++标准库中定义的类和对象都位于std命名空间中 C++标准库的头文件都不带.h后缀 C++标准库涵盖了C库的功能 C库中头文件对应C++的C++标准库预定义了多数常用的数据结构,如:字符串,链表,队列,栈等
2015-10-07 11:27:32 326
原创 7、抽象工厂模式(AbstractFactory)
客户需要一系列的多种产品,这些产品有都是由四个零件组成,其中三个零件a,b,c 需要工厂甲或工厂丙生产,零件d由工厂乙或者工厂丁生产。 首先客户给出产品清单:黄男,黄女,白男,白女,黑男,黑女。第一步:根据清单,所有的产品都有四个相同系列的零件组成,是通一种产品人,只是其规格不同。那么定义一个人的产品索引模板(产品指标表格):IHuman 第二步:
2015-10-07 11:24:18 282
原创 6、门面模式(Facade)
门面模式,为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这个子系统更容易使用。简单说,就是将复杂的逻辑封装起来,对外公开简单的接口,由客户调用。 main{ //正常调用: 定义工作者接口指针,并创建工作者,赋值给接口指针 ILetterProcess *pLetterProcess = new CLetterProc
2015-10-07 11:23:32 413
原创 5、工厂方法模式(FactoryMethod)
第一种分类:简单工厂模式 简单工厂模式,使用工厂的创建产品函数(参数为要创建的产品)创建产品。main{ 定义工厂指针 *pSimpleHumanFactory 定义产品指针 并使用工厂指针创建产品A赋值给产品指针 IHuman *pYellowHuman = pSimpleHumanFactory->CreateHuman("YellowHuman");
2015-10-06 13:44:31 252
原创 十一、类的静态成员
成员变量的回顾 通过对象名能够访问public成员变量 每个对象都可以有属于自己的成员变量 成员变量不能在对象之间共享 新的需求 统计类的程序运行期间有多少个对象同时存在 保证程序的安全性,并随时可以获取对象的数目 问题:使用普通的成员变量可行吗?类的静态成员 在C++中可以定义静态成员变量和静态成员函数 静态成员属于整个类
2015-10-06 13:42:36 259
原创 九、构造与析构
C++中的构造函数如何给对象进行初始化?一般而言所有的对象都需要一个确定的初始状态解决方案 为每个类都提供一个public的initialize函数 对象创建后立即调用initialize函数进行初始化 (插入9-1.cpp) 上述解决方案initialize只是一个普通的函数,必须显示的调用 一旦由于失误的原因,对象没有初始化,那么结果将
2015-10-06 13:37:57 262
原创 八:类的封装
类通常分为以下两个部分类的使用方式当使用类时,不需要关心其实现细节当创建一个类时,才需要考虑其内部实现细节例:使用手机时,只需要知道如何发短信,打电话,拍照等待即可,不需要关心手机是如何开发出来的。手机开发工程师就需要考虑手机的内部实现细节,如硬件细节和软件细节封装的基本概念根据日常生活中的经验:并不是类的每个属性都是对外公开的属性如:女孩子不希望外人知道自
2015-10-06 13:34:10 301
原创 面向对象的概念
基本概念: 类和对象是面向对象中的两个基本概念 “类”指的是一类事物,是一个抽象的概念 “对象”指的是属于某个类的一个实体,是一个具体存在的事物 ( 类是一种“模板”,可以通过这种模板创建出不同的对象“实例” 对象“实例”是类“模板”的一个具体实现 ...
2015-10-06 13:31:56 416
原创 4、多例模式(Multition)
单例模式只允许有一个工作者(new一次),多例模式允许有N个工作者(可以new N次),超过N的获取随机或者已某种规则返回N个实例中的一个。main{ 定义工作者甲指针 *pWorker1; (指定者一 找到工作者甲) 定义工作者甲指针 *pWorker2; (指定者二 找到工作者乙) 定义工作者甲指针 *pWorker3; (指定者二 找到工作者甲乙
2015-10-06 13:28:22 828
FriendlyARM USB Download Driver Setup
2014-05-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人