技巧

  • 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使用技巧相关推荐

  1. linux 内核调试信息在哪里,Linux kernel debug技巧----开启DEBUG选项

    Linux kernel debug技巧----开启DEBUG选项 作者:wowo 发布于:2016-11-1 19:39 分类:Linux应用技巧 kernel的source code中有很多使用p ...

  2. (转)Linux Kernel核心中文手册

    转自糖蒜的小屋http://blog.csdn.net/seastar_pickle/category/101975.aspx?PageNumber=2 Hardware Basic( 硬件基础知识  ...

  3. 在mtk移植个linux内核,移植 Linux Kernel 造成無法開機之解決方案以及除錯工具

    一般在以下情況, 我們會進行移植 Linux Kernel 的動作. 1. 將新版 Linux Kernel 移植到全新 SoC 上 開發人員為 SoC 廠商(e.g. MTK, TI, Allwin ...

  4. 【linux kernel】基于ARM64分析linux内核的链接脚本vmlinux.lds.S

    文章目录 一.导读 二.链接器是什么 三.链接脚本 四.linux内核的链接脚本 4-1 头文件包含描述 4-2 参数设置和宏定义描述 4-3 SECTIONS内容分析 五.linux内核的" ...

  5. [linux kernel] 内核下ksz8081驱动调试

    系统版本:Ubuntu18.04-64 编译器版本:gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) uboot版本:2018.07 - ...

  6. 【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介

    作者 : 韩曙亮 转载请出名出处 : http://blog.csdn.net/shulianghan/article/details/38636827 一. Linux 内核简介 1. 内核功能简介 ...

  7. [Linux Kernel] memory-barriers 内存屏蔽 官方文档

    文章目录 DISCLAIMER | 免责声明 CONTENTS | 目录 一.ABSTRACT MEMORY ACCESS MODEL | 抽象内存访问模型 1. DEVICE OPERATIONS ...

  8. 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 ...

  9. Linux命令使用技巧集锦(转)

    Linux命令使用技巧集锦(转) 初用Linux时可能有处处不方便的感觉, 可是等使用一段时间掌握了一些技巧后就会感到越来越顺手了. 以下就是我使用Linux以来积累的一些经验与技巧, 相信对初学者会 ...

最新文章

  1. 【VS实践】如何在vs中自动添加注释
  2. 实现一个模拟CMD.exe命令编辑模式执行与显示的Delphi控件
  3. 求合体电脑版_SCP CB 电脑移植版测评
  4. 阿里云ECS——[您的云服务器(xxx.xxx.xxx.xxx)由于被检测到对外攻击,已阻断该服务器对其它服务器端口(TCP:6379)的访问]解决方案
  5. Spring Cloud Gateway(五):路由定位器 RouteLocator
  6. 运算符优先级与结合性
  7. 城市大轰炸(洛谷P1830题题解,Java语言描述)
  8. uniaccess安全助手卸载_如何彻底卸载360
  9. 常见视频编码比较大全 常见视频解码技术资料1
  10. 纽约客封面故事:欢迎来到「黑暗工厂」,这里是由机器统治的世界
  11. 数据仓库建设思维导图
  12. [Android app] Linux串口驱动配置,可执行程序测试,App串口通信程序
  13. java overload_Java中的Overload和Override有什么区别
  14. Python3 读取word中的表格,根据表格第一行标题行查找想要的表格
  15. [经验] 我想加入阿里,我该怎么做
  16. 兴业java入职考试是考什么_兴业银行考试考什么
  17. 【Ext.Net学习笔记】03:Ext.Net DirectEvents用法详解、DirectMethods用法详解
  18. 多彩的产品之年——产品经理一席谈
  19. 挑战者象限新入一位,与猜测一致
  20. 点量云流化具有哪些特色

热门文章

  1. 收藏:通信网络基础知识
  2. 一份完整的机房建设方案
  3. 天猫双11期间,阿里数据中心将由机器人完成巡检
  4. 成功解决ValueError: Unable to add relationship because child variable ‘ID‘ in ‘cats_df‘ is also its inde
  5. Interview:算法岗位面试—10.11下午—上海某公司算法岗位(偏机器学习,互联网数字行业)技术面试考点之XGBoost的特点、python的可变不可变的数据类型、赋值浅拷贝深拷贝区别
  6. PyQt之Eric:成功解决No module named 'my_image_rc'
  7. 另一个程序正在使用此文件 进程无法访问 iis
  8. python登录网页版微信发送消息
  9. window文件过长无法删除的处理方式
  10. jx problem