自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 资源 (1)
  • 收藏
  • 关注

原创 C/C++经典案例四 函数和类模板template的使用

C++ 函数模板,意思就是提供一个通用的函数模板,供不同类型的地方使用,有函数模板和类模板:一、template函数模板:定义格式为:  template <typename/class T>  T test(T parm){ };特点:  模板没有调用时,是不会被实例化的,如果有调用,编译器会生成对应的函数;  模板定义和实现要放在一个文件中,否则编译...

2020-04-05 19:09:15 591

原创 C/C++经典案例三 virtual虚函数定义使用

#include <iostream>using namespace std;class ApplicationFramework{public: void templateMethod(){ for(int i = 0;i < 5;i ++){ custom1(); custom2();...

2020-04-05 19:08:18 619

原创 C/C++经典案例二 指针函数和函数指针的区别

指针函数和函数指针的区别:  指针函数:int* fun(int x,int y);  函数指针:int (*fun)(int x,int y);#include <iostream>using namespace std;/****************函数指针*****************//*func1是指向函数的指针*/int (*func1)(int...

2020-04-05 11:13:49 451

原创 C/C++经典案例一 结构体变量和结构体指针的定义与使用区别

结构体变量和结构体指针的区别:变量的内存存放在栈空间;指针需要指向一块可用的空间,才可以使用这个指针;​#include <stdio.h>struct Person { char *name; int age;};int main(void){ //1.定义一个Person的结构体变量per1,存放在栈空间 //2.内存随着...

2020-04-05 11:06:27 2206 1

原创 Camera7 MTK camera打开流程介绍

一、整体介绍:  首先看下MTKcam的整体框架图如下包含了很多的内容,其中camera的打开流程也贯穿在其中,从Camera APK 一层层的系统调用到driver再到Hardware层,这篇文章主要从Pipeline开始介绍打开camera的流程,JAVA/Cameraservice/MiddleWare层后续再进行介绍:1、MiddleWare(MW)层介绍:ICamer...

2020-03-02 17:01:41 3772 4

原创 Camera6 MTK camera启动流程介绍

一、Camera框架介绍:  Camera的框架分为Kernel 部分和hal部分,其中kernel部分主要有两块:    (1)image sensordriver,负责具体型号的 sensor 的 id 检测,上电,以及在preview、capture、       初始化、3A等等功能设定时的寄存器配置;    (2)isp driver,通过DMA将sensor数据流上传;...

2020-02-18 17:13:20 3781 3

原创 Camera5 MTK camera驱动框架介绍

一、概序:  前文已经介绍了camera驱动部分的内容Camera4 MTK camera驱动结构介绍,这里在回顾下之前的框架图,这篇主要介绍红框部分的内容:      imgsensor起到承上启下的作用,在系统起来时会创建整个camera驱动运行的环境,其中主要的文件和函数如下框图所示,先设备挂载时会调用注册platform设备platform_driver_register...

2020-02-16 12:44:29 3056 1

原创 Camera4 MTK camera驱动结构介绍

一、概述:  MTK camera主要的内容在hal层,现在有hal1/hal3,当下主流的使用的是hal3,驱动主要负责sensor电源的控制以及sensor相关寄存器的操作,MTK采用设备和驱动分离的思想,抽象出imgsensor.c来控制sensor的上下电以及sensor具体的操作,结构图如下:    二、sensorDriver介绍:  Sensordriver...

2020-02-15 13:15:11 4441

原创 Camera3 camera mipi通信协议

一、mipi协议介绍:  MIPI(移动行业处理器接口)是Mobile Industry Processor Interface的缩写。MIPI(移动行业处理器接口)是MIPI联盟发起的为移动应用处理器制定的开放标准。分别定义了一系列的手机内部接口标准,比如摄像头接口CSI、显示接口DSI,其中CSI(Camera Serial Interface)是由MIPI联盟下Camera工作组...

2020-02-14 10:16:15 3322

转载 Camera2 camera i2c总线协议介绍

一、I2C总线的拓扑结构:    I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。I2C通信方式为半双工,只有一根SDA线,同一时间只可以单向通信,485也为半...

2020-02-13 11:40:32 2553

原创 Camera1 camera初探之camera模组和硬件接口

一、Camera模组介绍:摄像头结构模组的图片如下:  Camera模组主要由以下几部分组成:  (1)工作原理: 物体通过镜头(lens)聚集的光,通过CMOS或CCD集成电路,把光信号转换成电信号,再经过内部图像处理器(ISP)转换成数字图像信号输出到数字信号处理器(DSP)加工处理,转换成标准的GRB、YUV等格式图像信号。(2)CCM 包含四大...

2020-02-12 14:57:22 3352 3

原创 C语言函数指针数组实现注册注销功能

在博客上看到一份很好的代码故保存下来,这种函数实现的思想很好,写代码时可以参考。#include <stdio.h>typedef void (*poniter_fun)(int);typedef struct poniter_desc { char *name; poniter_fun fp;}poniter_desc,*p_poniter_desc;pon...

2019-10-09 10:42:23 903

原创 linux crash debug kernel exception

一、crash介绍:  ramdump是分析kernel crash的资料,利用工具想gdb debug coredump一样直接debug ramdump。该工具在gdb上开发,使它可以支持kernel,因此使用方法和gdb一样,只不过增加了支持kernel的一些命令。crash官方网站:http://people.redhat.com/anderson/如何编译crash,然后用它...

2019-08-28 20:46:33 1854 2

原创 [Kernel_exception6] BUG: scheduling while atomic

一、实际问题:1、开机出现原子上下文调度的bug:[ 6.290494] <1>.(1)[285:init]BUG: scheduling while atomic: init/285/0x00000000[ 6.290528] <1>-(1)[285:init][<c010e61c>] (dump_backtrace) from [&l...

2019-08-23 14:36:35 1219

原创 linux文件系统五 PageCache的使用

一、PageCache介绍:  Page cache是通过将磁盘中的数据缓存到内存中,从而减少磁盘I/O操作,从而提高性能。此外,还要确保在page cache中的数据更改时能够被同步到磁盘上,后者被称为page回写(page writeback)。一个inode对应一个page cache对象,一个page cache对象包含多个物理page。1、PageCache的作用:缓...

2019-08-05 11:08:25 3353 1

原创 F2FS文件系统二 实验分析f2fs文件系统

一、环境准备:1、ubuntu系统安装f2fs-tools:sudo apt-get install -y f2fs-tools2、使用系统loop设备进行实践操作:dd if=/dev/zero of=device bs=4K count=51200 //200Mlosetup /dev/loop0 device //寻址可用的loop设备mkfs.f2fs -l f...

2019-08-01 14:41:03 4529 3

原创 F2FS文件系统一 设计背景及框架结构

一、F2FS文件系统简介1、背景:  F2FS (Flash Friendly File System)是专门为基于NAND的存储设备设计的新型开源flash文件系统。特别针对NAND闪存存储介质做了友好设计。F2FS于2012年12月进入Linux 3.8内核。目前,F2FS仅支持Linux操作系统。2、解决的问题:(1)LFS(Log-strctured...

2019-07-30 13:47:52 9482

原创 linux内核 spin_lock和spin_lock_irq的区别及注意点

1、spin_lock的调用流程:static inline void spin_lock(spinlock_t *lock){ raw_spin_lock(&lock->rlock);}#define raw_spin_lock(lock) _raw_spin_lock(lock)static inline void __raw_spin_lock(raw_sp...

2019-05-21 13:57:43 1152 1

原创 内存管理十一 MIGRATE_HIGHATOMIC类型页面

一、内存管理 中migration type中MIGRATE_HIGHATOMIC介绍:  在系统运行一段时间后,会出现大量内存碎片,会导致高阶页块(high-order page)的分配失败。为了避免,减轻这种情况,创建了MIGRATE_HIGHATOMIC类型的页面。在此后的分配中,只有当相同的高阶,并拥有高级分配权限时,才会分配这样的页块。当分配单个页框失败时,这样的页块会被...

2019-04-15 15:44:54 2373

原创 [Kernel_exception6] MTK hang_detect

一、hang_detect介绍:  MTK平台存在一个hang_detect的机制,用于检查应用层和驱动是否有卡住,应用层的system_server进程会30s喂狗,也就是对kernel driver中的watchdog节点进行kick的操作,当kernel 里面的watchdog线程卡住时,或者应用层发生SWT时不能及时喂狗,都会出现hang_detect的问题,出现问题时会有一定...

2019-04-02 19:56:09 2432

原创 linux文件系统四 VFS数据读取vfs_read

一、vfs_read的调用流程:二、VFS层调用流程1、系统调用sys_read会调用到vfs层的__vfs_read接口如下,在vfs层接口会调用大具体的文件系统的操作接口://kernel-4.9/fs/read_write.cssize_t __vfs_read(struct file *file, char __user *buf, size_t count, ...

2019-03-29 09:54:51 11013 1

原创 linux文件系统三 VFS数据结构体剖析

一、结构体种类:1、超级块对象struct super_block *sb:    超级块代表了整个文件系统,超级块是文件系统的控制块,有整个文件系统信息,一个文件系统所有的inode都要连接到超级块上,可以说,一个超级块就代表了一个文件系统。每次一个实际的文件系统被安装时,内核会从磁盘的特定位置读取一些控制信息来填充内存中的超级块对象。super_block定义在include/...

2019-03-25 10:50:14 512

原创 linux文件系统二 VFS读写流程

一、文件系统框架:  从文件系统一种我们了解了linux文件系统的框架,这里我们首先再通过下面简洁的流程图来展示linux文件系统文件读写的大框架:  从上图中可以看出linux文件系统的读写通过调用虚拟文件系统(VFS)的对应接口,从而调用到实际文件系统的读写接口,来进行emmc的操作,这样可以实现多文件系统兼容,如android中的boot/system分区是ext4的...

2019-03-21 11:42:44 2038

原创 linux文件系统一 ext4框架结构

一、文件系统框架:  从下图可以看到整个文件系统包含:用户层:用户空间对文件的读写操作open/read/write等; VFS层:虚拟文件系统层,承上启下,为上下层提供接口; 文件系统层:可以存在很多类型的文件系统,VFS层的接口会调用到不同的文件系统层的接口; 缓存层:文件系统底下有缓存,PageCache,加速性能; 块设备驱动层:对硬盘进行读写操作进行管理;二、EX...

2019-03-13 18:54:50 2758

原创 [Kernel_exception5] undefined instruction

一、原理介绍:  操作系统内部会对中断、异常等进行处理,其中有一类异常是未定义指令异常undefined instruction,意思是CPU执行到一个未知的指令,CPU下一步不知该如何处理, 此时会触发kernel panic重启,重启时会产生mrdump,将问题时的栈信息和相关的寄存器信息保存下来提供分析。  产生undefined instruction情况有如下几种: ...

2019-03-12 17:34:17 4054

原创 ARM体系函数调用过程分析

一、背景:1、栈描叙:  栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。  进函数需要压栈操作,保存需要的信息;出函数时需要出栈操作,恢复现场。2、特殊寄存...

2019-03-06 11:16:32 3496

原创 linux kernel 编程基础

一、C语言系列(计算型):1、数据类型 int占4byte char占1byte (32bit的系统),求下面sizeof的大小:(1)sizeof练习 char str[] = "Hello"; sizeof(str) = 6; char *p = str; sizeof(p) = 1; void *pbu...

2019-02-24 16:42:45 655

原创 linux内核函数总结(likely & atomic & container_of & list_for_each_entry)

1、likely &unlikelyif (likely(value))等价于if (value)if (unlikely(value))等价于if (value)也就是说likely()和unlikely()从阅读和理解的角度是一样的。# define likely(x) __builtin_expect(!!(x), 1)# define unlikely(x...

2019-01-22 15:38:53 303

原创 [Kernel_exception4] mtk HWT debug

一、原理:  MTK平台有纯软件上的看门狗机制hang_detect,hang_detect机制是负责监控应用层重要服务(如system_server等),当然硬件上也有看门狗机制WDT,防止CPU一直卡住不去执行其他的工作,导致CPU不再进行调度的原因很多:长时间关闭中断。这个直接无法调度了,还可以细分为: 关中断的CPU死锁 关中断后陷入循环 中断频繁触发。则导致CPU...

2019-01-18 15:18:11 1798 1

原创 内存管理十 MTK平台内存RAM大小拆解

一、拆解:  本文以MTK平台2G RAM的设备为例,对RAM进行详细的拆解,对于2G的手机在设置-&gt;存储中,会看到总内存的大小为2G,这里的2G也可以通过ADB命令来获取到:(1)获取meminfo: cat /proc/meminfo  MemTotal:        1860024 kB   (2)获取reserve的内存:cat /proc/mtk_memcfg...

2019-01-15 19:53:54 3107

原创 进程调度四 linux CFS调度器

一、CFS调度器结构:思想:  理想状态下每个进程都能获得相同的时间片,并且同时运行在CPU上,但实际上一个CPU同一时刻运行的进程只能有一个。也就是说,当一个进程占用CPU时,其他进程就必须等待。CFS为了实现公平,必须惩罚当前正在运行的进程,以使那些正在等待的进程下次被调度。1、CFS运行队列:  每个CPU都有自己的运行队列,对应不同的调度器也有自己的运行队列,管理C...

2019-01-10 09:38:00 403

原创 进程调度三 进程调度介绍

一、进程调度介绍:1、进程调度的产生:  进程从使用资源方面可以分为如下两类,不管是I/O还是CPU受限类的进程,CPU都希望再尽可能短的时间完成更多的工作,但另一方面,又希望尽可能的减少资源(I/O或CPU)的消耗,这两则之间存在矛盾,所以进程的调度管理就是来协调两者之间的冲突。类型 别称 描述 示例 I/O受限型 I/O密集型 频繁的使用I...

2019-01-08 11:21:15 582

原创 进程调度二 进程创建do_fork

一、前言  kernel在启动初期并没有“进程”这个概念,因为不涉及多任务并发、调度,kernel 起来后会在start_kernel中创建kthread和init进程,在0号进程的基础上创建init进程(PID为1),0 进程会被设置成idle进程,加入到运行队列中。当CPU上没有可调度进程时,调度器才会选择0号进程运行:int start_kernel(){ .......

2018-12-28 18:50:35 313

原创 进程调度一 进程的介绍

一、进程介绍:1、什么是进程:  进程 = 程序 + 执行,进程是系统进行资源分配和调度的一个独立单位。  进程的鼻祖,idle进程(pid = 0) =&gt; kernel kthread进程(pid = 2); =&gt; 用户进程都是通过Init...

2018-12-28 15:45:50 379

原创 python实战 scrapy爬取猫眼正在热映电影

一、目标:  爬取猫眼网站上正在热映的电影及评分情况,保存到mongo的数据库中:    二、具体工作:(1)新建工程:  scrapy startproject maoyan  cd spider  scrapy genspider maoyan "maoyan.com"(2)分析网页:  使用chrome的xpath插件获取对应电影的名称:    获...

2018-12-03 22:55:01 2264

原创 ARM体系架构总结

一、ARM处理器简介及RISC特点1、ARM处理器简介:  ARM(Advanced RISC Machines)是一个32位RISC(精简指令集)处理器架构,ARM处理器则是ARM架构下的微处理器。ARM处理器广泛的使用在许多嵌入式系统。ARM处理器的特点有指令长度固定,执行效率高,低成本等。2、RISC设计主要特点:  (1)指令集——RISC减少了指令集的种类,通常一个周期...

2018-11-30 17:52:21 51371 1

原创 linux内核并发与同步机制

一、临界资源:  临界区是指访问或操作共享资源的代码段,这些资源无法同时被多个执行线程访问,为了避免临界区的并发访问,需要保证临界区的原子性,临界区不能有多个并发源同时执行,原子性保护的是资源和数据,包括静态局部变量、全局变量、共享的数据结构、Buffer缓存等各种资源数据,产生并发访问的并发源主要有如下:中断和异常:中断发生后,中断执行程序和被中断的进程之间可能产生并发访问; ...

2018-11-16 10:39:22 1078

原创 [Kernel_exception3] linux kernel out of memory panic(OOM)

一、out of memory 介绍:  Linux  kernel out_of_memory(简称OOM)从字面上看可以就可以看出是因为没有内存可供分配导致,OOM的产生和内存分配相关,分析此类问题需要对linux kernel的内存管理非常了解才好定位问题。产生OOM的原因大部分是因为内存的泄漏导致,但也不排除部分小内存的设备(512M或者更低)在使用大量耗内存的应用时,设备的内...

2018-11-06 15:43:36 2626 1

原创 python学习 爬取中华英才网工作职位

一、技能:(1)scrapy爬虫的原理;(2)xpath获取网页信息以及正则表达式的使用;二、代码:(1)创建工程:  scrapy   startproject   wuyoujob1    在spider文件夹scrapy genspider wuyoujob1 "search.chinahr.com" ---- 创建基础类(1)定义要爬取返回的内容(ite...

2018-11-03 13:08:41 1492

原创 内存管理九 linux内存页面回收

一、概序:  内核中的页面可以分为两类,一类是使用完毕便无保存的价值,所以立即便可释放、回收,这种页面的周转很简单:空闲 -&gt; (分配)-&gt; 使用 -&gt; (释放)-&gt; 空闲,例如通过kmalloc/vmalloc/alloc_page()分配的内存。另外一类是使用完毕了,其内容仍有保存的价值,只要条件允许,把这些页面“养起来”可以提供后面的工作效率,这些页面...

2018-10-31 14:42:30 1486

urllib2学习笔记

urllib2学习笔记,用于平时学习时的笔记使用: #返回读取网页全部内容,字符串 html = response.read() #返回访问的问页响应码 print response. getcode() #返回实际数据的URL print response.geturl() #返回访问网页的报头信息 print response.info print html

2018-07-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除