驱动杂记

struct file_operations中unlocked_ioctl和ioctl

http://blog.chinaunix.net/uid-20543672-id-3015637.html

ioctl受到大内核锁保护,unlocked_ioctl是无锁直接执行的。unlocked_ioctl优先级高于ioctl,如果存在unlocked_ioctl,则执行unlocked_ioctl,否则才执行ioctl。这个优先级的产生明显是为了过渡。

内核空间和用户空间交换数据

https://blog.csdn.net/yxtxiaotian/article/details/83987798

在内核空间和用户空间交换数据时,get_user和put_user是两个常用的函数。相对于copy_to_user和copy_from_user(将在另一篇博客 linux内核中的copy_to_user和copy_from_user 中分析),这两个函数主要用于完成一些简单类型变量(char、int、long等)的拷贝任务,对于一些复合类型的变量,比如数据结构或者数组类型,get_user和put_user函数还是无法胜任,这两个函数内部将对指针指向的对象长度进行检查,在arm平台上只支持长度为1,2,4,8的变量。

驱动绑定设备名

驱动ioctl函数中绑定的设备是事先通过注册设备名、Major_num等属性进行绑定。

kretprobe

https://blog.csdn.net/luckyapple1028/article/details/54782659

kprobes

https://blog.csdn.net/luckyapple1028/article/details/52972315

CONFIG_STRICT_DEVMEM

http://oliveryang.net/2017/03/linux-kernel-memory-hacking/

系统默认打开了 CONFIG_STRICT_DEVMEM 编译选项,从而限制了 /dev/mem (/dev/mem设备可以用来访问物理内存)驱动的使用。CONFIG_STRICT_DEVMEM的限制主要依赖于devmem_is_allowed的返回值。

不重新编译内核,利用kretprobe使得devmem_is_allowed函数返回永远是 1,便可以轻松绕过这个限制。

misc_register、 register_chrdev区别

https://blog.csdn.net/lanmanck/article/details/4713978

SGX调试模式读写内存

SGX-Step的做法是使用isgx注册的access_process_vm

//access_process_vm will use the ”struct vm_operations_struct” defined by the isgx driver

 (apvm_t) kallsyms_lookup_name("access_process_vm"));

kallsyms_lookup_name

kallsyms_lookup_name()在kernel/kallsyms.c文件中定义的,要使用它必须启用CONFIG_KALLSYMS编译内核

kallsyms_lookup_name()接受一个字符串格式内核函数名,返回那个内核函数的地址。

kallsyms_lookup_name("函数名");

http://blog.chinaunix.net/uid-24467128-id-3919206.html

TLB刷新

__flush_tlb_all刷新控制寄存器%%cr3为0, TLB中的所有项将自动失效

https://blog.csdn.net/kernel_details/article/details/1484641

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值