linux调试技巧(2):编写寄存器寄存器读取驱动

前一篇文章写了高通平台对于寄存器底层读取的支持,
这篇文章描述下如何在没有此工具的情况下,如何自己编译一个驱动程序读取寄存器值

工具的原理很简单,Linux 应用层无法直接访问内核空间,使用通过上层应用打开驱动,然后往驱动写值,来通过驱动去访问底层硬件

驱动中我们实现ioctl函数,相对于open 和write, ioctl 更具灵活性

static long debugs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{

	int ret;

	switch(cmd){
		case GET_VALUE:
			ret = get_register(arg);   //读取寄存器值
			if (ret < 0 )
				return -1;
			break;

		case SET_VALUE:
			ret = set_register(arg);  // 设置寄存器值
			if (ret < 0 )
				return -1;
			break;

		default:
			printk("Unknown cmd\n");
	}
	return 0;


}

ioctl实现读和写

读函数:

int get_register(unsigned long arg)
{



	int ret ;

	ret = copy_from_user(&registe,(void * )arg , sizeof (registe));  // 拷贝用户空间传入的值
	if(ret)
		return -EFAULT;    //错误判断

	printk( " kernel get addr form user \n");

     // 分配内核地址,讲具体寄存器地址映射到内核空间
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值