内核读写文件
来源:互联网 发布:免费笔记软件 编辑:程序博客网 时间:2024/05/17 00:11
内核读写文件当然有用,比如打印的一些重要信息掉电后就看不到了,所以要存在flash里。直接调用flash驱动读写,还不如直接读写文件。应用程序可以直接用open, read, write, close文件操作,对应到内核的系统调用是sys_open, sys_read, sys_write, sys_close.在syscall里排号挺靠前的,第3,4,5,6
SYSCALL(0, 0) /* 00 */
SYSCALL(sys_exit, 1)
SYSCALL(sys_ni_syscall, 0)
SYSCALL(sys_read, 3)
SYSCALL(sys_write, 3)
SYSCALL(sys_open, 3) /* 05 */
SYSCALL(sys_close, 1)
一般没人直接调用sys_*函数,可能可以,我没试过。
sys_open -> do_sys_open -> filp_open
sys_close -> filp_close
sys_read -> vfs_read -> file->f_op->read
sys_write -> vfs_write -> file->f_op->write
因为是内核空间,要读写用户空间数据需要在read/write前设置,用来表示buf是内核地址还是用户地址,0xc0000000以上还是以下。
file->f_pos表示文件内读写位置,open时是0,read后可修改file->f_pos的值,再read/write
tsfile = filp_open(tsdev->fileName, O_RDONLY, 0);
set_fs(KERNEL_DS);
err = tsfile->f_op->read(tsfile, tsbuf, TSBUFSIZE, &(tsfile->f_pos));
set_fs(USER_DS);
filp_close(tsfile, 0);
SYSCALL(0, 0) /* 00 */
SYSCALL(sys_exit, 1)
SYSCALL(sys_ni_syscall, 0)
SYSCALL(sys_read, 3)
SYSCALL(sys_write, 3)
SYSCALL(sys_open, 3) /* 05 */
SYSCALL(sys_close, 1)
一般没人直接调用sys_*函数,可能可以,我没试过。
sys_open -> do_sys_open -> filp_open
sys_close -> filp_close
sys_read -> vfs_read -> file->f_op->read
sys_write -> vfs_write -> file->f_op->write
因为是内核空间,要读写用户空间数据需要在read/write前设置,用来表示buf是内核地址还是用户地址,0xc0000000以上还是以下。
file->f_pos表示文件内读写位置,open时是0,read后可修改file->f_pos的值,再read/write
tsfile = filp_open(tsdev->fileName, O_RDONLY, 0);
set_fs(KERNEL_DS);
err = tsfile->f_op->read(tsfile, tsbuf, TSBUFSIZE, &(tsfile->f_pos));
set_fs(USER_DS);
filp_close(tsfile, 0);
- 内核读写文件
- Linux内核读写文件
- 内核中读写文件
- Linux内核读写文件
- Linux内核读写文件
- 内核态读写文件
- 内核驱动读写文件
- 内核里读写文件
- windows内核读写文件
- linux内核读写文件
- 内核读写文件
- linux内核读写文件
- Linux内核中读写文件
- 内核级文件读写流程
- linux内核中读写文件
- linux内核中读写文件
- linux内核中读写文件
- linux内核中读写文件
- delphi获取子字符串
- 女孩哭男孩沉默
- 首个国家级企业移动信息化标准正式启动
- touch screen注册字符设备
- Test
- 内核读写文件
- 踩天下,博客,留痕,营销,推广
- 首个国家级企业移动信息化标准正式启动
- 添加自己的i2c adapter (gpio转i2c)
- My Google Sites
- 通过__setup宏解析bootloader传递上来的自定义参数
- 四大顽疾阻碍CRM应用 标准化作业纸上谈兵
- unaligned.c报错
- 统筹规划,分布实施