- 博客(51)
- 收藏
- 关注
原创 armv8 启动 boot和kernel
CPU上电后,从固定地址的内部irom中运行irom代码(BL0),初始化SOC内部(时钟,关看门狗)。会判断启动方式,去外部不同的ROM中读取BL1(bootloader)到SRAM中去运行。
2023-07-26 14:39:01 247
原创 系统调用,上下文切换(cpu上下文,进程上下文,线程上下文,中断上下文,进程切换,线程切换)
上下文切换(cpu上下文,进程上下文,线程上下文,中断上下文,进程切换,线程切换)
2022-06-19 22:52:07 1549
原创 vmalloc kmalloc slab native和kernel 内存泄漏
vmalloc kmalloc slab native和kernel内存泄漏
2022-06-14 22:22:34 652
原创 I2C总线设备
x5pv210I2CSCL SDA GND同步 电平 低速(几百K,1-2M)短距离总线式结构主从式结构主要用于物联网传感器 如gsensor 温度 湿度 光度 压力电容式触摸屏(物理器件)(一般通过几十个引脚和电容触摸屏芯片连接,中间涉及到固件编程)电容触摸屏芯片(与soc间通过I2C)通信。应用层驱动,应用的需要对硬件比较了解 。这样做可以把差异化放到应用中,可以针对不同的I2C设备,避免不同的I2C设备需要驱动不停的改驱动。或者驱动的代码都放到驱动实现,直接向应用层
2022-06-01 01:52:43 610
原创 内核同步 进程同步 线程同步
内核同步机制原子操作自旋锁读写自旋锁信号量读写信号量互斥体完成变量顺序锁禁止抢占顺序和屏障读-复制-更新(RCU)进程同步机制回顾进程的通讯方式有:管道(2种),信号,信号量,消息队列,共享内存,套接字。而进程的异步通信方式只有信号量,其他都是同步机制 。线程的同步机制互斥量 信号量 事件(信号)临界区......
2022-05-31 17:44:22 66
原创 死锁死锁死锁
所知道的,自己获取次数大于释放,还有循环等待。互斥:至少有一个资源必须处于非共享模式,即一次只有一个进程可使用。如果另一进程申请该资源,那么申请进程应等到该资源释放为止。占有并等待:—个进程应占有至少一个资源,并等待另一个资源,而该资源为其他进程所占有。非抢占:资源不能被抢占,即资源只能被进程在完成任务后自愿释放。循环等待:解决方法:down_trylock down_killable down_timeout...
2022-05-31 17:39:24 84
原创 应用和内核的定时器
//轮训查看按键init_timer(&timer);timer.function = s3cbutton_timer_handler;time.expires = jiffies + (HZ/100); // 1/100秒add_timer(&timer);
2022-05-29 05:24:47 49
原创 高通UFEI和MTK
高通在MSM8998上引入了UEFI,用来代替LK(Little Kernel)。而高通UEFI由XBL和ABL两部分组成。XBL负责芯片驱动及充电等核心应用功能。ABL包括芯片无关的应用如fastboot。ABL则在开源Linux Android代码树里。对于高通平台启动过程依次为:PBL->XBL->ABL。一般用户定制化主要集中在ABL中,android 默认bootloader为什么选择lk......
2022-05-26 15:12:59 1700
原创 Linux上的各种锁
锁原子锁,计数自选锁信号量互斥锁避免死锁down_interruptibledown_killabledown_trylockdown_timeout
2022-05-22 04:53:26 587
原创 驱动如何操控硬件
就是操控寄存器如LEDGPJ0CONGPJ0DAT例如#define GPJ0CON 0xE0200240#define GPJ0DAT 0xE0200244#define rGPJ0CON *((volatile unsigned int *)GPJ0CON)#define rGPJ0DAT *((volatile unsigned int*)GPJ0CON)//insmod时rGPJ0CON = 0x11111111; //设置输入输出模式rGPJ0DAT =
2022-05-18 23:20:34 280
原创 卡io 掉电
从堆栈或者blockio节点看io loading比较重。项目前期通过dd命令或者emmc专用的测试方法去判定是否是emmc物料本身问题(规避方案,调整emmc驱动强度),提高emmc io thread的调度优先级和调度策略(core.c,scheduler_params.sched_priority = 1;sched_setscheduler(current, SCHED_FIFO, &scheduler_params);)。可以具体去看到底是哪个线程在占用io多。掉电1.健.
2022-05-18 20:32:02 130
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人