自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(226)
  • 资源 (7)
  • 收藏
  • 关注

原创 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 666

原创 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 434

原创 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 539

原创 NVIDIA GPIO

【代码】Nvidia orin gpio。

2023-10-08 16:58:39 488

原创 linux 内存管理(13) - memblock 案例分析

详细分析:- https://biscuitos.github.io/blog/MMU-ARM32-MEMBLOCK-memblock_information/驱动直接编译进内核,将驱动放到 drivers/BiscuitOS/ 目录下,命名为 memblock.c。

2023-04-02 18:50:09 386 1

原创 Linux ACPI(一) -- 解析ACPI表

描述acpi 如何解析

2022-06-06 11:07:12 6781

原创 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 1159 1

原创 linux ftrace(二) - 代码分析

1.ftrace核心初始化  trace.c是ftrace的核心,包括三个initcall:tracer_alloc_buffers、trace_init_debugfs、clear_boot_tracer。

2021-04-09 14:16:08 865

原创 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 1738

原创 linux signal

了解linux signal1.Linux信号概述  软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号机制除了基本通知功能外,还可以.

2021-03-23 11:31:13 1068 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 1417

原创 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 1065 2

原创 linux kprobe

了解linux kprobe1.What is kprobes?  kprobe是一个轻量级的内核调试工具,也是其他更高级的内核调试(如perf和systemtap的基础)。kprobes 主要用来对内核进行调试追踪, 属于比较轻量级的机制, 本质上是在指定的探测点(比如函数的某行, 函数的入口地址和出口地址, 或者内核的指定地址处)插入一组处理程序. 内核执行到这组处理程序的时候就可以获取到当前正在执行的上下文信息, 比如当前的函数名, 函数处理的参数以及函数的返回值, 也可以获取到寄存器甚至全局.

2021-02-28 22:54:52 851

原创 系统启动流程 - 理解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 7061

原创 Linux DRM(六) -- EDID

了解Extended Display Identification Data1.EDID 工作原理  EDID数据交换是显示器与信号源设备通讯说明自身性能的一种标准化方法。这种通讯是为了使显示器可以发送自身的性能特征——比如原始分辨率——到信号源设备,使这个设备生成适合于显示器要求的视频特性。用户不需要手动调节,就能最大限度地提升设备之间的兼容性,从而减少了因为不正确的设置和调整对显示图像和系统的整体可靠性所造成的影响。  一般来说,信号源设备可能是一台桌面计算机或笔记本电脑的显卡。EDID最初是.

2021-02-18 15:13:48 3199

原创 操作系统 - 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 2234

原创 操作系统 - 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 1886

原创 Linux DRM(一) -- 硬件信号

-了解LVDS1.LVDS接口  LVDS 即Low Voltage Differential Signaling,是一种低压差分信号技术接口。克服以TTL电平方式传输宽带高码率数据时功耗大、EMI电磁干扰大等缺点而研制的一种数字视频信号传输方式。LVDS输出接口利用非常低的电压摆幅(约350mV)在两条PCB走线或一对平衡电缆上通过差分进行数据的传输,即低压差分信号传输。采用LVDS输出接口,可以使得信号在差分PCB线或平衡电缆上以几百Mbit/s的速率传输,由于采用低压和低电流驱动方式,因此,实现了

2021-02-03 10:15:24 1405

原创 虚拟化技术之 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 2231

原创 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 21311 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 889

原创 UEFI 基础教程 (二):UEFI工程模块文件

1.概述  介绍EDK2的两个概念模块(Module)和包(Package)。“包”是一组模块及平台描述文件(.dsc文件)、包声明文件(.dec文件)组成的集合,多在以*pkg命名的文件夹中,一般也称这样的文件夹为一个包。模块是UEFI系统的一个特色。模块(可执行文件,即.efi文件)像插件一样可以动态地加载到UEFI内核中。对应到源文件,EDK2中的每个工程模块由元数据文件(.inf)和源文件(有些情况也可以包含.efi文件)组成。  主要介绍3种应用程序模块、UEFI驱动模块和库模

2021-01-13 13:10:50 2888

原创 UEFI 基础教程 (一) - 运行第一个APP HelloWorld

UEFI 基础教程 (二) - 运行第一个APP HelloWorld一.代码编写:1.edk2/OvmfPkg/HelloWorld/HelloWorld.c:#include <Uefi.h>#include <Library/UefiLib.h>#include <Library/BaseLib.h>#include <Library/DebugLib.h>#include <Library/BaseMemoryLib.h>.

2021-01-12 20:47:55 3099

原创 linux 信号响应

调查龙芯s4 异常调查1.信号的响应时机  对一个进程发送一个信号以后,其实并没有硬中断发生,只是简单把信号挂载到目标进程的信号 pending 队列上去,信号真正得到执行的时机是进程执行完异常/中断返回到用户态的时刻。  让信号看起来是一个异步中断的关键就是,正常的用户进程是会频繁的在用户态和内核态之间切换(这种切换包括:系统调用、缺页异常、系统中断…),所以信号能很快的能得到执行。但这也带来了一点问题,内核进程是不响应信号的,除非它刻意的去查询。所以通常情况下无法通过kill命令去杀死一个内核.

2021-01-11 09:10:05 417

原创 Trinity 代码分析(二)

分析Trinity 代码架构1.整体架构trinity-main执行各种初始化,然后创建执行系统调用的子进程。trinity-main创建的共享内存区域用于记录各种全局信息(打开文件描述符号、执行的系统调用总数以及成功和失败的系统调用数等等)和每个子进程的各种信息(pid和执行的系统调用信息等等)。trinity-watchdog确保系统正常工作。它会检查子进程是否正在运行(可能会在系统调用中被暂停),如果没有运行,则会将其杀死。当主进程检测到其中一个子进程已终止时(因为trinity-.

2021-01-08 11:11:28 983 1

原创 Linux DRM(四) -- loongson driver

了解loongson 显卡驱动

2020-12-15 16:28:01 1750 1

原创 龙芯闪屏问题

分析loongson 闪屏问题。1.问题概述#三诺龙芯笔记本,测试进入待机或者休眠,发现在进入过程中出现闪烁问题。1.1.测试环境硬件:三诺 NB15L4A 龙芯3A4000 笔记本系统:uniontechos-desktop-20-professional-1030_mips641.2.复现步骤​ 选择进入待机或者休眠模式。...

2020-12-11 11:13:37 1256

原创 UOS 系统

了解UOS 系统1.架构总览一个完整的桌面系统从技术剖面看,从下到上主要分这几层:内核驱动层 主要用于驱动硬件,除了CPU、内存、磁盘外,最主要的要是要广泛兼容不同的网卡、显卡、声卡和外设等硬件设备。显示服务层 从内核引导到plymouth(我们俗称的开机动画)后,只要你见到登录界面输入密码的时候,这时候X Server已经起来了, X Server简单来理解就是Linux系统中掌握着绘制图形界面生杀大权的“天神”,所有程序要绘制图形的时候都要发送消息到 X Server, X Server.

2020-12-10 16:37:50 1248

原创 stressapptest

了解stressapptest1.概述  stressapptest - stress test application for simulating high load situations.stressapptest (unix name for Stressful Application Test) is a program that tries to maximize randomized traffic to memory from processor and I/O, wi.

2020-11-30 10:23:22 2345

原创 Linux DRM(三) -- DRM KMS/ Debug

分析drm 代码框架1.重要函数drm_core_init:这个函数是通过module(drm_core_init)明确在系统启动时进行调用,指定设备的major号,linux中默认为226。创建并初始化一个idr机制,这个机制其实原理上就是一个哈希表,由内核系统维护,能够快速的查找。调用register_chrdev(DRM_MAJOR, “drm”, &drm_stub_fops)注册一个字符设备,名称为drm,指定major号为226(可以cat /proc/devices就.

2020-11-23 07:11:16 5710

原创 Linux DRM(二) --Xorg/DRM

了解drm 基本概念1.Direct Rendering Manager  The Direct Rendering Manager (DRM) is a subsystem of the Linux kernel responsible for interfacing with GPUs of modern video cards. DRM exposes an API that user-space programs can use to send commands and data to th.

2020-11-22 22:12:22 4480 1

原创 Linux DRM(六) -- xrandr

使用xrandr添加分辨率。1.Linux下查看本机显示器分辨率:uos@uos-PC:~$ xrandrScreen 0: minimum 320 x 200, current 1600 x 1200, maximum 16384 x 16384HDMI-0 disconnected (normal left inverted right x axis y axis)DVI-0 disconnected (normal left inverted right x axis y axis)V.

2020-11-19 13:22:04 2770

原创 linux serial framework (3) - serial example

1.The following C program reads lines (i.e. canonical mode) from a serial terminal, and is configured to detect a Mark (or 1) as the parity bit with an 8-bit character frame.#define SERIALTERMINAL "/dev/ttyS0"#include <errno.h>#include <fc

2020-11-12 20:41:58 513

原创 Trinity 概述(一)

了解linux kernel fuzzing test - trinityTrinity, a system call fuzzing tester for the Linux kernel. Fuzzing is a security technique which feeds random arguments into functions to see what breaks.Trinity is developed using the latest glibc/kernel, which.

2020-11-11 11:16:58 1106

原创 linux kernel fuzzing test - 概述

了解Fuzzing1.Introduction  Fuzz本意是“羽毛、细小的毛发、使模糊、变得模糊”,后来用在软件测试领域,中文一般指“模糊测试”,英文有的叫“Fuzzing”,有的叫“Fuzz Testing”。本文用fuzzing表示模糊测试。  Fuzzing技术可以追溯到1950年,当时计算机的数据主要保存在打孔卡片上,计算机程序读取这些卡片的数据进行计算和输出。如果碰到一些垃圾卡片或一些废弃不适配的卡片,对应的计算机程序就可能产生错误和异常甚至崩溃,这样,Bug就产生了。所以,Fuzz.

2020-11-11 10:28:37 699

原创 linux IRQ Management (十一) - 龙芯中断

了解loongson irq1.MIPS CPU总共定义了5种异常。分别为:冷重启、热重启异常TBL充填异常XTBL充填异常cache错误异常异常当发生上面异常后,CPU会跳转到上面所述地址开始执行异常处理程序。对于中断,CPU会跳转到其他类型的异常位置开始执行异常处理程序。当MIPS CPU发生中断后,CPU的状态变化到如下状态,总结如下列表:EPC寄存器保存了发生中断是程序执行指令的地址CP0中STATUS寄存器 EXL置位为1,表示正在异常状态,.

2020-11-02 13:26:55 759

原创 linux IRQ Management (十) - 龙芯loongson 中断概述

了解loongson 中断机制1.MIPS 中断类型  在mips体系结构中,中断、陷阱、系统调用和任何可以中断程序正常执行的情况都称作异常。mips的异常是精确异常,在发生任何异常时都指向一条指令,所有这条异常指令之前的指令都执行完成了,所有这条指令之后的指令都还没开始执行。1.1.异常种类1.2.异常相关寄存器  MIPS exceptions are handled by a peripheral device to the CPU called coprocessor 0 (cp0.

2020-11-02 13:19:56 875

原创 电源管理(2) - loongson cpufreq

了解loongson cpufreq1.clock 初始化 170 static int loongson3_clock_init(void) 171 { 172 int i; 173 174 for_each_possible_cpu(i) { 175 sprintf(clk_names[i], "cpu%d_clk", i); 176 cpu_clks[i].name = clk_na.

2020-10-31 16:10:28 582

原创 电源管理 - EC

了解笔记本电源管理EC1.概述  EC的全称是Embedded Controller,嵌入式控制器。它实际上是一个单片机,常用于笔记本电脑中,用于键盘控制,触摸板,电源管理,风扇控制,笔记本电池管理等等的功能,所以虽然对于笔记本用户来说,EC一般是不可见的,但是却发挥着重要的作用。EC芯片通常是一个独立的芯片,并包含独立运行的软件,存放在自己(或者与BIOS共用)的非易失性介质中。  EC在笔记本电脑的整个生涯中都存在,这里的意思是即使笔记本关机,EC也还在工作,除非拔掉电池,EC芯片没有供电,只.

2020-10-31 10:36:06 4704

原创 linux serial framework (2) - serial 8250 driver

uart1.UART 框架图2.8250/16550芯片  该类芯片的驱动文件为8250.c,位于内核源码的/drivers/serial/目录下面。serial8250_init为该驱动的入口函数,nr_uarts和UART_NR在内核配置中定义,跟具体的平台相关,通常定义为4。由于CONFIG_SPARC没有被定义,所以做的第一件事情就是注册一个名为serial_8250_reg的UART驱动。重点分析:serial8250_init()—>uart_register_driv.

2020-10-30 09:51:28 3424

Device Tree debugging - part 3

linux device tree debugger 宝典卷三,解决Device Tree Issues。

2019-02-15

ORANGE’S:一个操作系统的实现

学习如何编写自己的操作系统,对于初学者很有帮助,值得学习。

2019-02-15

Device Tree debugging - part 2

linux device tree debugger 宝典卷二,解决Device Tree Issues。

2019-02-15

Device Tree debugging - part 1

学习linux device tree宝典,解决Device Tree Issues,有助于深刻认识DT.

2019-02-15

Practical_Binary_Analysis

ELF Format,Binary Analysis Fundamentals,Basic Binary Analysis in Linux,Disassembly and Binary Analysis Fundamentals

2019-02-15

Operating_Systems_From_0_to_1

linux ELF architecture,gdb debugger elf,x86 assembly language

2019-02-15

调试PLT/GOT代码

该代码包用于学习动态链接实现流程,便于进行调试PLT/GOT

2019-02-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除