Share
share
wmail-yh
ing
展开
-
内核学习——0、内核各类机制
定义interrupt-controller节点一般是bsp dts写好的要用哪个IO作为 irq,在自己设备节点中使用 interrupt-parent = <&外设>引用即可,然后interrupt = <信号脚 RISING/BOTH>,声明这个外设的具体哪个信号线和是什么电平触发。原创 2024-06-19 17:21:41 · 789 阅读 · 0 评论 -
内核学习——6、timer的学习和使用
/定时的时间点,当前时间的20ms之后。因为内核定时器是一个单次的定时器,所以如果想要多次重复定时时需要在定时器绑定的函数结尾重新装载时间,并启动定时。//绑定定时时间到后的执行函数。//添加并启动定时器。参数是timer中的变量data。原创 2024-06-19 17:07:30 · 386 阅读 · 0 评论 -
内核学习——5、中断
处理方式:硬中断是由CPU直接中断正在运行的程序,去处理中断源的请求;软中断需要将CPU的控制权转移到中断处理程序或其他特定的指令,待其处理完毕之后,再继续被打断的程序。软中断不会直接中断CPU,只有当前运行的进程才会产生软中断,软中断是一种需要内核为正在运行的进程去做一些事情(通常为IO)的请求。处理中断的驱动需要运行在CPU上的,中断产生时,CPU停止当前程序去处理中断请求,一个IRQ中断一个CPU。硬中断的中断号是由中断控制器提供,软中断的中断号是由指令直接指出,无需中断控制器。原创 2024-06-19 17:04:16 · 348 阅读 · 0 评论 -
内核学习——4、并发、竞争、同步与互斥
S加1,相加之后大于0,进程继续执行,若相加之后小于等于0,从信号等待队列中唤醒一个等待进程,然后再返回原进程继续执行或转入进程调度。信号允许多个线程同时使用共享资源,和操作系统中PV操作相同,它有同时访问共享资源线程的最大数目,可以使等待资源进程进入休眠状态。S减1,若减1之后仍大于等于0,则进程继续执行,若减1之后小于0,该进程被阻塞到信号对应的队列中,然后转入进程调度。保护共享资源,实现线程同步。只有拥有互斥对象(即互斥量)的线程才具有访问共享资源的权限,互斥量只有一个,所以不能被多个线程同时访问。原创 2024-06-19 16:22:17 · 293 阅读 · 0 评论 -
内核学习——3、自旋锁的作用及其实现
作用:保护一段临界区的操作时独占的,不能由其他cpu或者线程同时访问破坏数据结构多核系统SMP:主要考虑一个cpu进入临界区之后,其他CPU不能再去进入这个临界代码区单核系统:不能被其他进程抢占单核系统自旋锁实现:两种情况打断:抢占、中断preempt_disable():关闭抢占preempt_enable():打开抢占普通自旋锁接口:spin_lock、spin_unlock:主要就是关闭和打开抢占风险是关闭抢占只是组织了其他进程对CPU的抢占,但不能阻止中断程序对CPU的抢占原创 2024-06-19 16:10:05 · 188 阅读 · 0 评论 -
内核学习——2、linux页高速缓存中脏页的概念
当进程修改了告诉缓存中的数据时,该页就被内核标记为脏页,内核将会在合适时间将脏页数据写到磁盘中,以保持高速缓存 中的数据和磁盘中的数据是一致的。硬盘的读写速度远不如内存速度,系统把读写比较频繁的数据事先放到内存中,以提高读写速度,这就叫高速缓存。llinux是以页为高速缓存的单位。脏页是linux内核中的概念。原创 2024-06-19 15:20:13 · 107 阅读 · 0 评论 -
内核学习——1、list_head
通过结构体成员地址来求得结构体地址:ptr是所求结构体中的list_head成员指针,type是所求结构体类型,member是结构体list_head成员名。此时,list_head就作为它父结构体中的一个成员了,我们知道list_head的地址(指针)时,就可以通过list_entry来获得它的父结构的地址。结构体中没有数据域,所以一般把list_head嵌入到其他结构中使用。LIST_HEAD():生成双向链表头节点。list_for_each:遍历双向链表。双向循环链表:list_head。原创 2024-06-19 15:18:52 · 417 阅读 · 0 评论 -
Linux的dev/ 和 sys/ 和 proc/ 目录
dev 目录存放的是应用与内核交互的设备文件,而/sys/dev目录存放的是系统的所有设备,这些设备由文件系统管理应用层操控底层两种方式:1、/dev 目录下的设备文件(设备节点) :复杂点的设备, LCD,摄像头等2、/sys 目录下设备的属性文件 :简单点的设备, led、gpio等。原创 2024-06-19 14:32:36 · 960 阅读 · 0 评论 -
uboot启动内核总结
原创 2024-06-13 15:25:43 · 69 阅读 · 0 评论 -
uid/chipid/socid
ChipID ChipID 一般存在于 AON_APB 寄存器上,用来标记芯片型号,更广义理解的话、 ChipID 还包括 VERSION ID AA/AB/AC )、 MFT_ID (标记晶圆厂及制程。UID UID 本质上是芯片在出厂 前 在 efuse 中专门的 block 写入的 CHIP SN/LOTID/wafer ID 等。关于 UID 、 CHIPID 、 SN 、 SOCID 几个名词的 区别。来的值,保证每颗芯片都不一样;信息)、 IMPL_ID 等标记于寄存器上的芯片信息;原创 2024-06-13 15:23:46 · 546 阅读 · 0 评论 -
类android设备reset过程
模式解析流程frameworks/base/core/java/android/os/PowerManager.javaframeworks/base/services/core/java/com/android/server/power/PowerManagerService.java把reason存储到SystemProperties,最后调用ShutdownThread带着reason传参frameworks/base/services/core/java/com/android/serve原创 2024-06-13 15:17:17 · 739 阅读 · 0 评论 -
u-boot启动第二阶段 Board.c
原创 2024-06-13 14:54:03 · 97 阅读 · 0 评论 -
使用python完成一个定时从版本库下载daily版本
【代码】使用python完成一个定时从版本库下载daily版本。原创 2024-06-13 14:42:00 · 193 阅读 · 0 评论 -
u-boot启动第一阶段 Start.S
从start.s中构建异常向量表,然后到lowlevel中,然后完成2到7,之后再再ram中做栈重定位动作,建立mmu,最后跳转到ddr。从sram的uboot的第一阶段跳转到ddr下的uboot的第二阶段地址(不直接从ram中完成uboot是因为ram空间有限)原创 2024-06-13 11:40:28 · 162 阅读 · 0 评论 -
git&repo配置
###服务器编译需要软件sudo apt-get install libfile-copy-recursive-perl libswitch-perl libssl-dev libswitch-perl libxml-simple-perl git gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev原创 2022-03-05 11:12:13 · 554 阅读 · 0 评论