linux kernel使用技巧
技巧
- 1、 在linux kernel中读写ARM寄存器示例
- 2、 在optee中读写ARM寄存器示例
- 3、自定义log打印函数
1、 在linux kernel中读写ARM寄存器示例
#define FUNCTION_INVARIANT(reg) \static void get_##reg(struct kvm_vcpu *v, \const struct sys_reg_desc *r) \{ \u64 val; \\asm volatile("mrs %0, " __stringify(reg) "\n" \: "=r" (val)); \((struct sys_reg_desc *)r)->val = val; \}FUNCTION_INVARIANT(midr_el1)
FUNCTION_INVARIANT(ctr_el0)
FUNCTION_INVARIANT(revidr_el1)
FUNCTION_INVARIANT(id_pfr0_el1)
FUNCTION_INVARIANT(id_pfr1_el1)
FUNCTION_INVARIANT(id_dfr0_el1)
FUNCTION_INVARIANT(id_afr0_el1)
FUNCTION_INVARIANT(id_mmfr0_el1)
FUNCTION_INVARIANT(id_mmfr1_el1)
FUNCTION_INVARIANT(id_mmfr2_el1)
FUNCTION_INVARIANT(id_mmfr3_el1)
FUNCTION_INVARIANT(id_isar0_el1)
FUNCTION_INVARIANT(id_isar1_el1)
FUNCTION_INVARIANT(id_isar2_el1)
FUNCTION_INVARIANT(id_isar3_el1)
FUNCTION_INVARIANT(id_isar4_el1)
FUNCTION_INVARIANT(id_isar5_el1)
FUNCTION_INVARIANT(clidr_el1)
FUNCTION_INVARIANT(aidr_el1)
2、 在optee中读写ARM寄存器示例
#define DEFINE_REG_READ_FUNC_(reg, type, asmreg) \
static inline type read_##reg(void) \
{ \type val; \\asm volatile("mrs %0, " #asmreg : "=r" (val)); \return val; \
}#define DEFINE_REG_WRITE_FUNC_(reg, type, asmreg) \
static inline void write_##reg(type val) \
{ \asm volatile("msr " #asmreg ", %0" : : "r" (val)); \
}#define DEFINE_U32_REG_READ_FUNC(reg) \DEFINE_REG_READ_FUNC_(reg, uint32_t, reg)#define DEFINE_U32_REG_WRITE_FUNC(reg) \DEFINE_REG_WRITE_FUNC_(reg, uint32_t, reg)#define DEFINE_U32_REG_READWRITE_FUNCS(reg) \DEFINE_U32_REG_READ_FUNC(reg) \DEFINE_U32_REG_WRITE_FUNC(reg)#define DEFINE_U64_REG_READ_FUNC(reg) \DEFINE_REG_READ_FUNC_(reg, uint64_t, reg)#define DEFINE_U64_REG_WRITE_FUNC(reg) \DEFINE_REG_WRITE_FUNC_(reg, uint64_t, reg)#define DEFINE_U64_REG_READWRITE_FUNCS(reg) \DEFINE_U64_REG_READ_FUNC(reg) \DEFINE_U64_REG_WRITE_FUNC(reg)DEFINE_U32_REG_READWRITE_FUNCS(cpacr_el1)
DEFINE_U32_REG_READWRITE_FUNCS(daif)
DEFINE_U32_REG_READWRITE_FUNCS(fpcr)
DEFINE_U32_REG_READWRITE_FUNCS(fpsr)DEFINE_U32_REG_READ_FUNC(contextidr_el1)
DEFINE_U32_REG_READ_FUNC(sctlr_el1)/* ARM Generic timer functions */
DEFINE_REG_READ_FUNC_(cntfrq, uint32_t, cntfrq_el0)
DEFINE_REG_READ_FUNC_(cntpct, uint64_t, cntpct_el0)
DEFINE_REG_READ_FUNC_(cntkctl, uint32_t, cntkctl_el1)
DEFINE_REG_WRITE_FUNC_(cntkctl, uint32_t, cntkctl_el1)DEFINE_U64_REG_READWRITE_FUNCS(ttbr0_el1)
DEFINE_U64_REG_READWRITE_FUNCS(ttbr1_el1)
DEFINE_U64_REG_READWRITE_FUNCS(tcr_el1)DEFINE_U64_REG_READ_FUNC(esr_el1)
DEFINE_U64_REG_READ_FUNC(far_el1)
DEFINE_U64_REG_READ_FUNC(mpidr_el1)
DEFINE_U64_REG_READ_FUNC(midr_el1)
/* Alias for reading this register to avoid ifdefs in code */
#define read_midr() read_midr_el1()
DEFINE_U64_REG_READ_FUNC(par_el1)DEFINE_U64_REG_WRITE_FUNC(mair_el1)/* Register read/write functions for GICC registers by using system interface */
DEFINE_REG_READ_FUNC_(icc_ctlr, uint32_t, S3_0_C12_C12_4)
DEFINE_REG_WRITE_FUNC_(icc_ctlr, uint32_t, S3_0_C12_C12_4)
DEFINE_REG_WRITE_FUNC_(icc_pmr, uint32_t, S3_0_C4_C6_0)
DEFINE_REG_READ_FUNC_(icc_iar0, uint32_t, S3_0_c12_c8_0)
DEFINE_REG_READ_FUNC_(icc_iar1, uint32_t, S3_0_c12_c12_0)
DEFINE_REG_WRITE_FUNC_(icc_eoir0, uint32_t, S3_0_c12_c8_1)
DEFINE_REG_WRITE_FUNC_(icc_eoir1, uint32_t, S3_0_c12_c12_1)
3、自定义log打印函数
#define XXXX_PRINTK(fmt, ...) ALOGI(fmt, ##__VA_ARGS__)
#define XXXX_ENTER() XXXX_PRINTK("%d : %s :enter",__LINE__, __func__)
#define XXXX_EXIT() XXXX_PRINTK("%d : %s :exit",__LINE__, __func__)
linux kernel使用技巧相关推荐
- linux 内核调试信息在哪里,Linux kernel debug技巧----开启DEBUG选项
Linux kernel debug技巧----开启DEBUG选项 作者:wowo 发布于:2016-11-1 19:39 分类:Linux应用技巧 kernel的source code中有很多使用p ...
- (转)Linux Kernel核心中文手册
转自糖蒜的小屋http://blog.csdn.net/seastar_pickle/category/101975.aspx?PageNumber=2 Hardware Basic( 硬件基础知识 ...
- 在mtk移植个linux内核,移植 Linux Kernel 造成無法開機之解決方案以及除錯工具
一般在以下情況, 我們會進行移植 Linux Kernel 的動作. 1. 將新版 Linux Kernel 移植到全新 SoC 上 開發人員為 SoC 廠商(e.g. MTK, TI, Allwin ...
- 【linux kernel】基于ARM64分析linux内核的链接脚本vmlinux.lds.S
文章目录 一.导读 二.链接器是什么 三.链接脚本 四.linux内核的链接脚本 4-1 头文件包含描述 4-2 参数设置和宏定义描述 4-3 SECTIONS内容分析 五.linux内核的" ...
- [linux kernel] 内核下ksz8081驱动调试
系统版本:Ubuntu18.04-64 编译器版本:gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) uboot版本:2018.07 - ...
- 【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介
作者 : 韩曙亮 转载请出名出处 : http://blog.csdn.net/shulianghan/article/details/38636827 一. Linux 内核简介 1. 内核功能简介 ...
- [Linux Kernel] memory-barriers 内存屏蔽 官方文档
文章目录 DISCLAIMER | 免责声明 CONTENTS | 目录 一.ABSTRACT MEMORY ACCESS MODEL | 抽象内存访问模型 1. DEVICE OPERATIONS ...
- The Linux Kernel Module Programming Guide 2.4 中文版
The Linux Kernel Module Programming Guide 2.4 中文版 分类: Linux/os 2007-09-29 11:14 820人阅读 评论(0) 收藏 举报 T ...
- Linux命令使用技巧集锦(转)
Linux命令使用技巧集锦(转) 初用Linux时可能有处处不方便的感觉, 可是等使用一段时间掌握了一些技巧后就会感到越来越顺手了. 以下就是我使用Linux以来积累的一些经验与技巧, 相信对初学者会 ...
最新文章
- 【VS实践】如何在vs中自动添加注释
- 实现一个模拟CMD.exe命令编辑模式执行与显示的Delphi控件
- 求合体电脑版_SCP CB 电脑移植版测评
- 阿里云ECS——[您的云服务器(xxx.xxx.xxx.xxx)由于被检测到对外攻击,已阻断该服务器对其它服务器端口(TCP:6379)的访问]解决方案
- Spring Cloud Gateway(五):路由定位器 RouteLocator
- 运算符优先级与结合性
- 城市大轰炸(洛谷P1830题题解,Java语言描述)
- uniaccess安全助手卸载_如何彻底卸载360
- 常见视频编码比较大全 常见视频解码技术资料1
- 纽约客封面故事:欢迎来到「黑暗工厂」,这里是由机器统治的世界
- 数据仓库建设思维导图
- [Android app] Linux串口驱动配置,可执行程序测试,App串口通信程序
- java overload_Java中的Overload和Override有什么区别
- Python3 读取word中的表格,根据表格第一行标题行查找想要的表格
- [经验] 我想加入阿里,我该怎么做
- 兴业java入职考试是考什么_兴业银行考试考什么
- 【Ext.Net学习笔记】03:Ext.Net DirectEvents用法详解、DirectMethods用法详解
- 多彩的产品之年——产品经理一席谈
- 挑战者象限新入一位,与猜测一致
- 点量云流化具有哪些特色
热门文章
- 收藏:通信网络基础知识
- 一份完整的机房建设方案
- 天猫双11期间,阿里数据中心将由机器人完成巡检
- 成功解决ValueError: Unable to add relationship because child variable ‘ID‘ in ‘cats_df‘ is also its inde
- Interview:算法岗位面试—10.11下午—上海某公司算法岗位(偏机器学习,互联网数字行业)技术面试考点之XGBoost的特点、python的可变不可变的数据类型、赋值浅拷贝深拷贝区别
- PyQt之Eric:成功解决No module named 'my_image_rc'
- 另一个程序正在使用此文件 进程无法访问 iis
- python登录网页版微信发送消息
- window文件过长无法删除的处理方式
- jx problem