摘要:
通过前面有章调试方法概述的简单介绍,kprobe其实就是将某个要检测的指令备份,再替换成int3(x86)或者未定义指令(arm)来触发异常,再调用对应体系的异常处理函数来执行我们自定义的hook,执行完我们自定义的hook,再将备份的指令放回原来的位置继续往下执行,下面我们就来看下linux内核版 阅读全文
摘要:
可执行文件格式 Bin flash上的需要直接运行的只能是raw binary格式的文件,BIN是将elf文件中的代码段,数据段,还有一些自定义的段抽取出来做成的一个内存的镜像,可以被CPU 运行的二进制文件。比如uboot Elf executable and link format,文件里面包含 阅读全文
摘要:
进程间通信 每个进程的地址空间都是独立的,所以要通信,就要通过内核实现 管道 匿名管道:比如dmesg | grep ov13850命令中的|就是一个管道;也可通过int pipe(int fd[2])系统调用创建两个读写的文件描述符,通过fork创建子进程,会复制文件描述符,直接在各自进程读写,就 阅读全文
摘要:
V4l2架构 sensor层 通过下面设备树我可以看到ov13850出图需要的硬件支撑sensor,mipi,isp,数据流从下至上 sensor作为i2c1的子节点,向上绑定mipi接口 通过kernel\drivers\media\i2c\ov13850.c注册驱动 在ov13850_probe 阅读全文
摘要:
系统调用 系统调用框架 系统调用的参数传递,由用户态进入了内核态,所以既不能使用用户态的堆栈也不能直接使用内核态堆栈;所以系统调用的参数被写入CPU的寄存器;在进入内核态调用系统调用服务例程之前,通过使用SAVE_ALL宏把这些寄存器的值保存在内核态堆栈中:eax保存徐通调用号和返回值;ebx,ec 阅读全文
摘要:
spi总线 时序 spi_master SPI 主机驱动的核心就是申请 spi_master,然后初始化 spi_master(被赋值的tranfer函数,对于不同soc,寄存器不一样,这个就是soc厂商的驱动开发实现的),通过平台总线match上之后,执行probe--最后调用 spi_bitba 阅读全文
摘要:
MMU 功能 访问控制;虚拟地址(页)到物理地址(页框)的转换 转换过程 页由Frame Index(页框索引:与物理页框进行映射)和位p(present 存在位:本页的映射是否有效;映射无效,Frame Index部分为X,该位为0;映射有效则该位为1;虚拟地址=页号和偏移;物理地址=页框首地址+ 阅读全文
摘要:
网络基础 五层模型 物理层:负责把两台计算机连起来,然后在计算机之间传送0,1这样的电信号。 链路层:负责给这些0,1制定传送的规则,然后另一方再按照相应的规则来进行解读,比如以太网协议;通过mac地址来在计算机之间传输数据,在同一子网中,当主机A连着多台主机,想给主机B发数据包(包含了接收者的ma 阅读全文
摘要:
调试方法 printk 可在打印的字符串前加上等级 cat /proc/sys/kernel/printk能看到当前的等级信息,可修改为8 内核封装了printk的宏,自定义其打印格式,比如加上设备名称 DEBUG_LL和EARLY_PRINTK;为了在内核初始化控制台驱动driver/tty/se 阅读全文
摘要:
并发与竞争 概念 概念:多个执行单元并行执行时,如果对共享资源发起访问就容易引起竟态 竟态条件:核与核的进程之间,核与核的中断之间,核中断与核进程之间,核内进程之间,核内进程与中断 编译乱序:打开编译器优化后,汇编码并没有严格按照代码的逻辑顺序 执行乱序:执行也不一定按汇编码顺序,缓存命中率高的访存 阅读全文