SOC固件(BIOS)开发: 1.熟悉硬件原理图:要弄清楚pin脚的功能: 2.配置GPIO引脚,配置成Native功能还是GPIO功能(如果是配置成GPIO,需要在code里面显式的使用): 3.硬件驱动是通过controller的寄存器来访问device的:以IIC为例,如果SOC有IIC的controller,固件程序只需要配置IIC的GPIO为native功能,然后code里面通过读写IIC controller的寄存器就可以完成对IIC device的访问(IIC的硬件时序由硬件con…
简述BIOS中对IIC device的支持,以touchpad为例. 信息收集 收集平台的硬件信息: 1. IIC controller number(PCH一般包含多个controller,我们使用的是哪一个): 2. INT / Reset信号用的是哪个GPIO: 3. Enable信号用的是哪个GPIO(Enable信号一般由EC控制,这样可以通过Hotkey来Enable/Disable) 收集device的信息: 1. slave address; 2. hid descriptor…
1 任务 为了学习计算机底层和os,我给自己布置了一个任务:在x86硬件上,使用c和nasm来显示一张bmp图片.完成这个任务,前后估计花了2个月的业余时间. 这个任务涉及了很多知识点,包括:启动区.保护模式.nasm汇编.c和nasm汇编互调.ld链接.硬盘io读取.显卡调色板模式.bmp图片格式.bios中断指令.c指针操作内存.borch虚拟机.binutils工具集.makefile等. 2 环境 ubuntu borchs nasm和 c PS:c代码遵循google的C++ 风格指南…
x86(32位)-1-32位x86 处理器编程架构 Intel 32 位处理器架构简称IA-32(Intel Architecture,32-bit) x86是指intel的86系列的CPU统称,比如说8086就是x86里面中的一款CPU. IA-32,X86-32是指intel的32位CPU架构. x86系列的处理器架构是从8086发展来的,是基于8086 的,具有延续性和兼容性.所以x86系列的CPU都可以和8086CPU进行类比. 1 基本执行环境: 1.1 地址空间: 32 位的处理器有…
33.JAVA编程思想--JAVA IO File类 RandomAccessFile用于包括了已知长度记录的文件.以便我们能用 seek()从一条记录移至还有一条:然后读取或改动那些记录. 各记录的长度并不一定同样:仅仅要知道它们有多大以及置于文件何处就可以. 首先.我们有点难以相信RandomAccessFile 不属于InputStream 或者OutputStream 分层结构的一部分.除了恰巧实现了DataInput 以及DataOutput(这两者亦由 DataInputStream…
一.协议遇到IO自动切换 python网络编程,遇到IO自动切换,通过模块gevent来实现: import gevent,time def g1(): print ("g1 is start!") gevent.sleep(3) print ("g1 is end!")def g2(): print ("g2 is start!") gevent.sleep(2) print ("g2 is end!")def g3():…
内存虚拟化 Shadow Paging 作者 Shawn 在其中文博客中很详尽地介绍了 KVM 在只支持一级分页的 x86 平台上用 “Shadow Paging”进行 MMU 虚拟化的实现,由于目前新的 X86 硬件平台提供的虚拟化扩展都能支持两维分页处理,所以笔者在此没必要再细节描述“Shadow Paging” 的实现, 但仍有必要概括一下其特点 : 1. 每个虚拟机对应的 qemu-kvm 进程通过分配不同的虚拟内存区间来映射虚拟机不同的物理内存区域. 每个虚拟机对应的 struct k…
BIOS工程师眼中常用的EC知识点汇总: EC的硬件架构 EC硬件结构上主要分为两部分:Host Domain和EC Domain Host Domain就是通过LPC与CPU通信的部分(LPC部分需要先执行相关的初始化:比如decode 62/66  68/6c,设置LPC Serial IRQ mode to continus mode等,这样EC才能通过IO与PCH通信),可以看成ISA的设备卡: EC Domain可以看成一个51的单片机. BADRSEL寄存器是在EC初始化的时候设置的…
_HID:device唯一 _STA:决定device在不在(在DM下面能不能看到) _CRS:描述分配给device的资源 _INI:在OSPM加载描述表的时候运行一次(比如,如果要根据不同情况给device赋值不同的_HID,可以把代码加在这里) BIOS code与ASL code之间传递数据 通过ASL code定义的OperationRegion,OperationRegion实例: 1. BIOS code里面定义了一个结构体,ASL code里面定义了一个OperationRegi…
通过Windbg来追踪ASL code的运行: 目标机的配置: 第一步: 在BIOS Setup下面 disable secure boot(不然下面debug on 命令会失败):关闭防火墙. 第二步:替换acpi.sys1. 获取与目标机OS 同版本的check build ACPI.sys文件,替换系统中的C:\Windows\System32\drivers\acpi.sys 2.acpi.sys属于系统文件,直接替换会出错,可以把下面的内容保存为:TrustedIntsaller.re…