- 博客(244)
- 资源 (7)
- 收藏
- 关注
原创 Linux ACPI - ACPI系统描述表架构(2)
此结构包含了RSDT(Root System Description Table)或者XSDT(eXtended System Description Table)的地址,而RSDT或者XSDT指向了其他向OSPM提供数据的系统描述表。为了让OSPM能够控制计算机上的设备的资源和热插拔,ACPI提供了一种描述这些设备的信息和控制方式的结构,称为ACPI Definition Blocks,它们按照一种层级结构组织,这种组织方式成为ACPI Namespace。操作系统的 ACPI 驱动程序会执行这些方法。
2025-05-04 17:58:10
826
原创 Linux ACPI - 各种表(3)
iasl工具获取ACPI表需要从特定目录去拿,比较复杂,这里还可以用一个简单的工具acpidump来获取。iasl是一个编译和解析ACPI的工具,在编译UEFI的时候也是必不可少的。默认系统不会安装,需要额外安装:apt install iasl。1.1.解析ACPI表。
2025-05-04 16:13:50
185
原创 Linux 内核模块签名
该选项为内核强制验证功能在策略上提供了一定的灵活性,比如运行系统需要DKMS或者SystemTap支持的话,如果没有实现配套的PKI签名服务机制,最好将CONFIG_MODULE_SIG_FORCE设为n,同时为了保证安全在内核命令行参数中指定module.sig_enforce。如果内核选项CONFIG_MODULE_SIG和CONFIG_MODULE_SIG_FORCE打开的话,当加载模块时内核会检查模块的签名, 如果签名不存在或者签名内容不一致,会强制退出模块的加载。,以验证内核模块的签名。
2025-03-16 08:46:30
1018
原创 OpenHarmony- 基于dayu800 GPIO 实践
该目标包含了两个源文件main.c和gpio_dayu800.c,并指定了包含目录//commonlibrary/c_utils/base/include。这个函数的作用是将"hardware"组与"gpio:gpio_dayu800"依赖项相关联。以上函数实现了是用指令对Dayu800开发板的GPIO引脚的操作,根据输入参数的数量和值,函数执行不同的操作,并在终端打印出相应的信息。2.6.新增sample/hardware/gpio目录下文件gpio_dayu800.c和gpio_dayu800.h。
2025-02-24 15:10:06
891
原创 OpenHarmony-8.IDL工具
d后的dir为目标输出目录,以输出文件夹名为IIdlTestServiceTs为例,在idl可执行文件所在目录下执行./idl-gen -gen-ts -d IIdlTestServiceTs -c IIdlTestServiceTs/IFoo.id,将会在执行环境的IIdlTestServiceTs目录中生成接口文件、Stub文件、Proxy文件。根据OpenHarmony IDL中的定义生成的信息或代码可以简化跨进程或跨设备调用接口的实现。1.openharmony IDL工具。
2025-01-15 18:06:14
1113
原创 OpenHarmony-6.PM 子系统(2)
OpenHarmony默认提供了电量等级,根据当前的电量来定义系统统一的电量等级,如满电量、高电量、低电量、极低电量等。但是电量等级对应的电量值在不同的产品上规格是不同的,产品希望根据产品的设计规格来定制此特性。采用NAPI (Native API)获取电池信息,NAPI 组件是一套对外接口基于Node.js N-API规范开发的原生模块扩展开发框架。Battery Manager 提供了电池信息查询的接口,同时开发者也可以通过公共事件监听电池状态和充放电状态的变化。1.2.电池和充电属性接口。
2024-12-27 10:26:11
1182
原创 OpenHarmony-6.PM 子系统(1)
电源管理子系统1.简介 电源管理子系统是 OpenHarmony 的基本能力子系统,有电池服务组件、显示控制组件和电源管理服务组件,主要提供如下功能:重启服务:系统重启和下电。系统电源管理服务:系统电源状态管理和休眠运行锁管理。显示相关的能耗调节:包括根据环境光调节背光亮度,和根据接近光亮灭屏。省电模式 :在不损害主要功能和性能的前提下,提供一种低功耗操作模式 。电池服务:支持充放电、电池和充电状态的监测,包括状态的更新和上报,还包括关机充电。温控 :在设备温度到一定程度之后对应用、
2024-12-25 17:28:15
1045
1
原创 OpenHarmony-7.IPC/RPC组件
IPC和RPC通常采用客户端-服务端(Client-Server)模型,在使用时,请求Client端进程可获取Server端所在进程的代理(Proxy),并通过此代理读写数据来实现进程间的数据通信,更具体的讲,首先客户端会建立一个服务端的代理对象,这个代理对象具备和服务端一样的功能,若想访问服务端中的某一个方法,只需访问代理对象中对应的方法即可,代理对象会将请求发送给服务端;在整个通信过程中,如果使用的是IPC通信,则依赖的是Binder驱动,使用的是RPC通信,则依赖的是软总线驱动。
2024-12-22 21:01:25
1527
原创 OpenHarmony- 提交代码补丁
点击新建之后,会跳转到官方原始仓的Pull Request页面下,按照下图填写好相关的Pull Request信息即可。fork完成之后,就会自动跳转到自己的gitee仓库页面,里面会创建一个与你刚fork的仓库同名的仓库。5.向官方原始仓提交Pull Request。1.fork OpenHarmony中仓库。2.克隆fork出来的仓库到自己的主机上。3.配置本地仓与官方原始仓的关联。4.新建开发分支进行开发。
2024-12-20 09:19:28
337
原创 OpenHarmony-3.HDF Display子系统(6)
MIPI DSI接口是MIPI(Mobile Industry Processor Interface)联盟定义的显示接口,主要用于移动终端显示屏接口,接口数据传输遵循MIPI协议,MIPI DSI接口为数据接口,传输图像数据,通常情况下MIPI DSI接口的控制信息以MIPI包形式通过MIPI DSI接口发送到对端IC,不需要额外的外设接口。SoC平台驱动适配层:借助此SoC适配层,实现Display驱动和SoC侧驱动解耦,主要完成芯片平台相关的参数配置,并传递平台驱动层的调用到器件驱动层。
2024-12-19 11:07:31
1283
原创 OpenHarmony-5.HDI 框架
使用IDL语法描述HDI接口并保存为.idl文件,.idl文件在编译过程中转换为C/C++语言的函数接口声明、客户端与服务端IPC相关过程代码,开发时只需要基于生成的头文件中函数接口实现具体服务功能即可。HDI(Hardware Device Interface,硬件设备接口)是HDF驱动框架为开发者提供的硬件规范化描述性接口,位于基础系统服务层和设备驱动层之间,是连通驱动程序和系统服务进行数据流通的桥梁,是提供给硬件系统服务开发者使用的、统一的硬件设备功能抽象接口,其目的是为系统服务屏蔽南向设备差异。
2024-12-17 17:29:49
1276
原创 OpenHarmony-3.HDF input子系统(5)
Input驱动模型基于HDF驱动框架、Platform接口、OSAL接口进行开发,向上对接规范化的驱动接口HDI(Hardware Device Interface)层,通过Input-HDI层对外提供硬件能力,即上层Input Service可以通过HDI接口层获取相应的驱动能力,进而操控Touchscreen等输入设备。常见的输入设备有键盘、鼠标、游戏杆、触摸屏等。器件设备向平台驱动注册:将实例化的器件设备注册到平台驱动,实现设备和驱动的绑定,并完成中断注册、上下电等器件初始化工作。
2024-12-12 16:11:47
1175
原创 OpenHarmony-3.HDF框架(3)
最后,调用 DevMgrService的接口 StartService,即 DevmgrServiceStartService() 启动设备管理服务主体,其实就是为一个个host设备创建 DevHostServiceClnt ,并启动对应的 Host 设备在Host域内的DevHostService。DevmgrServiceAttachDeviceHost()遍历host节点的所有设备信息,使用DriverLoader构建设备节点,装载驱动,发布服务,然后将设备链接到Host的devices列表。
2024-12-10 13:45:47
847
原创 OpenHarmony-3.HDF框架(2)
适配层提供具体平台硬件设备的驱动,按照核心层定义的模型创建设备对象,并完成对象的初始化(包括必要的成员变量初始化以及钩子方法挂接,以及相关的硬件初始化操作),最后使用核心层提供的注册方法将设备对象注册到核心层纳入统一管理。在内核态,这个指针可以直接指向实际设备对象,但是对于某些类型的平台设备,需要在用户态提供同样的DevHandle类型及配套API,而实际设备对象在内核空间,导致无法直接获取和使用内核空间的地址。提供统一适配接口:定义了标准的设备对象模型,驱动程序仅需关注标准对象模型的适配。
2024-12-04 13:47:58
783
原创 OpenHarmony-4.GPIO驱动(1)
GPIO又俗称为I/O口,I指的是输入(in),O指的是输出(out)。通常,GPIO控制器通过分组的方式管理所有GPIO管脚,每组GPIO有一个或多个寄存器与之关联,通过读写寄存器完成对GPIO管脚的操作。在HDF框架中,同类型设备对象较多时(可能同时存在十几个同类型配置器),若采用独立服务模式,则需要配置更多的设备节点,且相关服务会占据更多的内存资源。核心层主要提供GPIO管脚资源匹配,GPIO管脚控制器的添加、移除以及管理的能力,通过钩子函数与适配层交互,供芯片厂家快速接入HDF框架。
2024-12-04 10:40:51
964
原创 OpenHarmony-3.HDF框架(1)
OpenHarmony驱动子系统采用C面向对象编程模型构建,通过平台解耦、内核解耦,兼容不同内核,提供了归一化的驱动平台底座,旨在为开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。支持组件化的驱动模型,为开发者提供更精细化的驱动管理,开发者可以对驱动进行组件化拆分,使得驱动开发者可以更多关注驱动与硬件交互部分。驱动框架完成大部分驱动加载的动作,用户只需注册自己所需的接口和配置,然后驱动框架就会解析配置的内容,完成驱动加载和初始化动作。提供驱动框架能力,主要完成驱动加载和启动功能。
2024-11-20 15:15:04
1276
原创 OpenHarmony-2.DeviceInfo适配
ohos.boot.sn参数值的获取方式:首先从cmdline(由uboot生成)获取,如果获取到的是sn值则直接读取,若获取的是文件路径,则从文件中读取;当获取不到时从默认的Sn文件读取,默认文件为:/sys/block/mmcblk0/device/cid;在BUILD.gn中定义,参考文件/base/startup/init/services/etc/BUILD.gn。厂商动态值参数,目前有三种获取形式:cmdline读取,编译宏定义,在BUILD.gn中定义。1.启动子系统设备信息说明。
2024-11-18 16:09:36
627
原创 OpenHarmony-1.启动流程
这里将init进程的代码分成了通用的和特有的两部分,共同的代码均在 /base/startup/init/services/init/文件夹下,其中有lite/和standard/分别用来构建小型系统和标准系统的init进程。这里主要分析标准进程的启动流程。由于OH标准系统是基于kernel内核开发的,所以启动init进程,那么OH的init进程的入口为/base/startup/init/services/init/main.c中。由于从kernel进程启动的init进程。1.kernel的启动。
2024-11-13 21:40:22
1241
原创 riscv uboot 启动流程分析 - uboot启动流程
以board_init_f和board_init_r两个板级的初始化接口为例,u-boot分别在common/board_f.c和common/board_r.c两个文件中提供了通用实现。u-boot的基本策略,就是声明一系列的API(如low_level_init、board_init_f、board_init_r等等),并在u-boot的核心逻辑中调用它们。board_init_r 函数中逐个执行函数列表 init_sequence_r 中的初始化函数。
2024-10-24 18:02:01
947
原创 riscv uboot 启动流程分析 - SPL启动流程
对于嵌入式SOC(System On Chip)芯片来说,芯片内本身含有SRAM用于将闪存中的bootloader(uboot)加载到RAM来运行, 但由于片内RAM大小限制,加载不了完整的U-boot程序,所以需要在加载uboot之前加载一个精简版的SPL,SPL可用来初始化DDR等一些必须的外设,然后在把完整的Uboot加载到DDR里面运行。将 spl_mmc_load_image 函数添加到 .u_boot_list_2_spl_image_loader_* 段。了解启动参数,首先要了解启动流程。
2024-10-24 17:00:39
968
1
原创 linux 系统调用流程分析
syscall指令会先查看此时RAX的值,然后找到系统调用号为那个值的系统调用,然后执行相应的系统调用。这就是让内核执行了fork。将所有寄存器压入内核栈,其中 ebx, ecx, edx 存放程序的参数以 eax 为偏移量,在 sys_call_table 中找到指定的系统调用的地址,其中sys_call_table 定义了所有的系统函数的地址。那么,编译出来的可执行程序会认为,这个函数是用户态函数,其传参仍然是按 %rdi, %rsi, %rdx, %rcx, %r8, %r9的顺序,与内核接口不符。
2023-11-21 22:54:13
715
原创 linux 内存管理(13) - memblock 案例分析
详细分析:- https://biscuitos.github.io/blog/MMU-ARM32-MEMBLOCK-memblock_information/驱动直接编译进内核,将驱动放到 drivers/BiscuitOS/ 目录下,命名为 memblock.c。
2023-04-02 18:50:09
449
原创 linux -IOMMU
了解IOMMU1.什么是IOMMU? 在计算机领域,IOMMU(Input/Output Memory Management Unit)是一个内存管理单元(Memory Management Unit),它的作用是连接DMA-capable I/O总线(Direct Memory Access-capable I/O Bus)和主存(main memory)。传统的内存管理单元会把CPU访问的虚拟地址转化成实际的物理地址。而IOMMU则是把设备(device)访问的虚拟地址转化成物理地址。为了防止.
2021-06-15 14:27:27
1307
1
原创 linux ftrace(二) - 代码分析
1.ftrace核心初始化 trace.c是ftrace的核心,包括三个initcall:tracer_alloc_buffers、trace_init_debugfs、clear_boot_tracer。
2021-04-09 14:16:08
937
原创 linux ftrace (一) - 概述
了解ftrace1.What is tracing? Tracing is the specialized use of logging to record information about a program’s flow of execution. You know when you add print messages in your code to debug it? You are tracing the application with your own “tracing sys.
2021-03-26 10:48:20
1912
原创 linux signal
了解linux signal1.Linux信号概述 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号机制除了基本通知功能外,还可以.
2021-03-23 11:31:13
1119
1
原创 DBUS
了解DBUS1.概述 D-Bus是一种高级的进程间通信机制,它由freedesktop.org项目提供,使用GPL许可证发行。D-Bus的主要概念为总线,注册后的进程可通过总线接收或传递消息,进程也可注册后等待内核事件响应,例如等待网络状态的转变或者计算机发出关机指令。 D-Bus是Linux及其他类UNIX系统上的一种IPC(Interprocess communication)机制。相较于传统的管道(PIPE)、Socket等原生基于字节流的IPC方式,D-Bus提供了基于独立Messag.
2021-03-16 16:52:08
1519
原创 linux udev
了解udev (Linux dynamic device management)1.概述 Udev is the device manager for the Linux kernel. Udev dynamically creates or removes device node files at boot time in the /dev directory for all types of devices. udev is a replacement for the Device Fil.
2021-03-04 15:44:25
1179
2
原创 linux kprobe
了解linux kprobe1.What is kprobes? kprobe是一个轻量级的内核调试工具,也是其他更高级的内核调试(如perf和systemtap的基础)。kprobes 主要用来对内核进行调试追踪, 属于比较轻量级的机制, 本质上是在指定的探测点(比如函数的某行, 函数的入口地址和出口地址, 或者内核的指定地址处)插入一组处理程序. 内核执行到这组处理程序的时候就可以获取到当前正在执行的上下文信息, 比如当前的函数名, 函数处理的参数以及函数的返回值, 也可以获取到寄存器甚至全局.
2021-02-28 22:54:52
949
原创 系统启动流程 - 理解modules加载流程
linux 启动流程1.启动过程分为三个部分BIOS 上电自检(POST)引导装载程序 (GRUB2)内核初始化启动 systemd,其是所有进程之父。1.1.BIOS 上电自检(POST) BIOS stands for Basic Input/Output System. In simple terms, the BIOS loads and executes the Master Boot Record (MBR) boot loader. When you first .
2021-02-21 16:29:39
7503
原创 Linux DRM(六) -- EDID
了解Extended Display Identification Data1.EDID 工作原理 EDID数据交换是显示器与信号源设备通讯说明自身性能的一种标准化方法。这种通讯是为了使显示器可以发送自身的性能特征——比如原始分辨率——到信号源设备,使这个设备生成适合于显示器要求的视频特性。用户不需要手动调节,就能最大限度地提升设备之间的兼容性,从而减少了因为不正确的设置和调整对显示图像和系统的整体可靠性所造成的影响。 一般来说,信号源设备可能是一台桌面计算机或笔记本电脑的显卡。EDID最初是.
2021-02-18 15:13:48
3500
原创 操作系统 - startx/xinit
了解xinit1.概述 用户可以通过 xinit 程序手动启动 Xorg 显示服务器,startx脚本是 xinit 的前端。 xinit 通常用在启动 X 时执行窗口管理器 或 桌面环境。虽然可以使用 xinit 在无窗口管理器的情况下启动图形程序,大部分图形程序都需要一个兼容 EWMH 的窗口管理器。显示管理器 启动 Xorg 并读取 xprofile。 启动X主要有两种方法:一是Display Manager,如XDM、GDM、KDM,此种方法通过图形界面登录;另一种是通过xi.
2021-02-08 15:43:30
2566
原创 操作系统 - Lightdm
了解Display Manager1.Definition In the X Window System, an X display manager is a graphical login manager which starts a session on an X server from the same or another computer. A display manager presents the user with a login screen. A session starts .
2021-02-08 13:23:42
2105
原创 Linux DRM(一) -- 硬件信号
-了解LVDS1.LVDS接口 LVDS 即Low Voltage Differential Signaling,是一种低压差分信号技术接口。克服以TTL电平方式传输宽带高码率数据时功耗大、EMI电磁干扰大等缺点而研制的一种数字视频信号传输方式。LVDS输出接口利用非常低的电压摆幅(约350mV)在两条PCB走线或一对平衡电缆上通过差分进行数据的传输,即低压差分信号传输。采用LVDS输出接口,可以使得信号在差分PCB线或平衡电缆上以几百Mbit/s的速率传输,由于采用低压和低电流驱动方式,因此,实现了
2021-02-03 10:15:24
1488
原创 虚拟化技术之 kvm (二)- 中断虚拟化
中断虚拟化1.X86 中断 中断从设备发送到CPU需要经过中断控制器,现代x86架构采用的中断控制器被称为APIC(Advanced Programmable Interrupt Controller)。APIC是伴随多核处理器产生的,所有的核共用一个I/O APIC,用于统一接收来自外部I/O设备的中断,而后根据软件的设定,格式化出一条包含该中断所有信息的Interrupt Message,发送给对应的CPU。 每个核有一个Local APIC,用于接收来自I/O APIC的Interrup.
2021-01-31 21:45:31
2567
原创 Linux DRM(五) -- Libdrm 库
了解libdrm1.DRM driver 与 libdrm库 DRM是Linux内核层的显示驱动框架。它把显示功能封装成 open/close/ioctl 等标准接口,用户空间的程序调用这些接口,驱动设备,显示数据。 libdrm库封装了DRM driver提供的这些接口。通过libdrm库,程序可以间接调用DRM Driver。 DRM exports API through ioctl, libdrm is a user mode library to wrap these ioct.
2021-01-29 19:28:39
22521
1
原创 虚拟化技术之 kvm (一)- virsh
kvm的命令行工具virsh;1.概述 virsh工具功能非常丰富,它可以全生命周期的管理kvm;比如创建虚拟机,查看虚拟机,动态热插拔硬盘,给虚拟机做快照,迁移、启动、停止、挂起、暂停、删除虚拟机等等操作。 上图主要描述了kvm的主要工具栈,从大的类别可以分为libvirt和qemu这两大类,其中libvirt中分virtual machine manager和virsh。virtual machine manager中的virt-manager是基于图形界面的管理,其他都是可以在命令.
2021-01-15 13:47:34
1012
原创 UEFI 基础教程 (二):UEFI工程模块文件
1.概述 介绍EDK2的两个概念模块(Module)和包(Package)。“包”是一组模块及平台描述文件(.dsc文件)、包声明文件(.dec文件)组成的集合,多在以*pkg命名的文件夹中,一般也称这样的文件夹为一个包。模块是UEFI系统的一个特色。模块(可执行文件,即.efi文件)像插件一样可以动态地加载到UEFI内核中。对应到源文件,EDK2中的每个工程模块由元数据文件(.inf)和源文件(有些情况也可以包含.efi文件)组成。 主要介绍3种应用程序模块、UEFI驱动模块和库模
2021-01-13 13:10:50
3137
Practical_Binary_Analysis
2019-02-15
Operating_Systems_From_0_to_1
2019-02-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人