Linux篇-iic实例
I2C1 用户态工具查看 i2c 设备 123456789101112$ i2cdetect Usage: i2cdetect -l | -F I2CBUS | [-ya] [-q|-r] I2CBUS [FIRST LAST]Detect I2C chips -l List installed buses -F BUS# List functionalities on this bus -y Disable interactive mode -a Force scanning of non-regular addresses -q Use smbus quick write commands for probing (default) -r Use smbus read byte commands for probing FIRST and LAST limit probing range 查看 I2C 接口. 123$ i2cdetect -li2c-2 i2c rk3x-i2c I2C...
Linux篇-gpio实例
GPIO 实例本节适配硬件才能观察 GPIO 的情况, 因此需要开发板. 1 基本模板首先改变原本的设备树. 12345678910111213141516171819 // LEDleds { compatible = "gpio-leds"; // status = "okay"; // we will test our driver status = "disabled"; heart_led { label = "run"; gpios = <&gpio1 RK_PB3 GPIO_ACTIVE_LOW>; linux,default-trigger = "heartbeat"; default-state = "off"; };}; my_managed_device { compatible =...
Linux篇-platform实例
platform实例1 基本模板1.1 传统方法在设备树出现之前, platform_device 也是需要手动去书写的. device 代码. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566#include <linux/module.h>#include <linux/platform_device.h>#define DEV0_BASE_ADDR 0x10000000#define DEV1_BASE_ADDR 0x20000000#define RES_SIZE 0x100/* device 0 */static struct resource dev0_res[] = { [0] = { .start = DEV0_BASE_ADDR, .end = DEV0_BASE_ADDR...
Linux篇-设备树实例
设备树实例1 基本模板这里的设备树由 qemu 平台自动生成, 我们进行导出 加上 -machine virt,dumpdtb=qemu-riscv.dtb 导出.再转变成 dts: dtc -I dtb -O dts -o qemu-riscv.dts...
Linux篇-chrdev
字符设备驱动Notice: 这只是一个模板, 方便后续取用. kernel version: 6.18.5 1...
kspp for openRuyi
KSPP for openRuyi0 概述KSPP 全称 Kernel Self Protection Project, 是一个旨在提升Linux内核本身抵御漏洞利用能力的安全项目. 本篇旨在对比官方推荐的 config 文件与 openRuyi 下的 patch, config, spec 文件来勘察 riscv 配置的合理性. KSPP 项目说明了安全性加固内核的配置应该是什么样子的. Sometimes people ask the Kernel Self Protection Project what a secure set of build CONFIGs and runtime settings are. This is a brain-dump of the various options for a particularly paranoid system. 作者还表述到, 我们也可以通过 kernel-hardening-checker 项目来获取推荐配置. Another place to find recommended kernel...
lfs from riscv
download: https://github.com/Jvlegod/lfs-from-riscv/releases/ 1 环境搭建全程建议给执行的用户目标权限. 这样后面就尽量别用 sudo, 容易出错. 1sudo chown -R lfs:lfs $LFS/tools $LFS/sources $LFS/usr $LFS 如果没有创建该用户. 123456# 创建 lfs 组sudo groupadd lfs# 创建 lfs 用户并加入组,指定 bash 为 shellsudo useradd -s /bin/bash -g lfs -m -k /dev/null lfs# 给 lfs 用户设置密码sudo passwd lfs 后期恢复权限. 123sudo chown -R root:root $LFS/toolssudo chown -R root:root $LFS/sourcessudo chown -R root:root $LFS/usr 安装 riscv64 所需要的模拟器. 12sudo apt install qemu-user-static...
二进制安全调研
二进制安全用户态 Roadmap本次目的为研究, RISC-V 架构在用户态执行时的漏洞检测, 分析, 利用, 测试, 逆向, 插桩, 运行时监控能力的可能性. 希望后续能够 proting RISC-V 相关的一套二进制安全工具链, 能覆盖: 从漏洞发现 => 原因分析 => 利用验证 => 运行时约束的完整闭环能力. 为 RISC-V 用户态软件提供从开发到上线的全流程安全维护能力. TODO: 可以看到本篇中涉及到的软件生态是非常复杂的, 还有很多软件我并没有详细地去介绍和运行, 毕竟不能讲空话, 这个工作量巨大, 需要很多的积累才能一步步补充完整, 如果没有亲自去涉足笔者是不会轻易口嗨的, 因此本篇中的话语都是有依据可信的, 不可信的部分会单独进行一些说明. 0 写在前面的话再次强调, 本次的调研的目的是为了了解用户态二进制安全领域相关的关键路径, 便于为了后续的探索铺路(后续如果进一步去研究内核态的情况了会另出一版) 本次探索的难点在于两个方面: 第一个难点是我如何得知自己探索的软件在生态内是否是关键软件?...
Linux 内核社区交互与补丁提交指南
Linux 内核社区交互与补丁提交指南本指南记录了向 Linux Kernel Mailing List (LKML) 及其分支列表(如 RISC-V)发送邮件/补丁的标准流程. 以 https://lore.kernel.org/all/6eafdd754222e11a43be4bbc3652f7605d47afa6.1766559840.git.sanjayembeddedse@gmail.com/ 为例. 1 环境准备 git-email b4 2 配置123456789101112# 基础身份配置# git config --global user.name "Keke Ming"# git config --global user.email "ming.jvle@gmail.com"git config --global user.name <"Your Real Name">git config --global user.email...
linux篇-手写文件系统
1 结构体示意此前在虚拟文件系统篇章应该已经列举过一部分结构了, 这里我们继续用一个实例来完成本篇. 这里纠正一下前面的一些概念, 我们编码当中的 sb 指代的是该文件系统的一个实例, 而不是物理意义上的超级块. 类型 表示什么 super_block 一个挂载的文件系统 inode 一个文件或目录 dentry 路径名到 inode 的映射 struct file_system_type. fs_flags. 标志 作用 FS_REQUIRES_DEV 表示文件系统需要块设备(如 ext4/xfs) FS_BINARY_MOUNTDATA mount 参数是二进制数据(较少见) FS_HAS_SUBTYPE 支持子类型,例如 fuse.sshfs FS_USERNS_MOUNT 允许 user namespace 的 root 挂载 FS_RENAME_DOES_D_MOVE 自己处理 d_move(),VFS...