2021.09.15

ioctl示例代码:

2011: OpenSource: Device Drivers, Part 9: Input/Output Control in Linux

2021.09.01
  • SYSCALL_DEFINE6(mmap, ...6)
    • ksys_mmap_pgoff(...6)
      • vm_mmap_pgoff(...6)
        • 🤔security_mmap_file
        • do_mmap(...6+2)
          • get_unmmaped_area(...6-prot) /// 为啥不需要prot?是把文件或shmem映射进来就不用?
2021.08.27

make modules_install做了啥,使用make -Bn可见,

  • 清理文件
  • 复制文件:modules.order的kernel部分、modules.builtinmodules.builtin.modinfo*.ko > /lib/modules/<VERSION>/
  • 生成module依赖关系的文件depmod /lib/modules/<VERSION>/
2021.08.25

尝试修改运行lkmpg1的kbleds。

修改几个API后kbleds可以运行了。

查内核API的方法:

2021.08.24

阅读lkmpg1的syscall stealing。

2021.08.23

数据是否驻留在物理内存里

参考https://linux-kernel-labs.github.io/refs/heads/master/labs/introduction.html 可以使用linux源码中提供的脚本生成compile_commands.json和ctags文件。

# 先编译内核
make defconfig # 或者用别的.config
make -j4

# 再生成compile_commands.json和cscope文件
./scripts/clang-tools/gen_compile_commands.py
make ARCH=x86 COMPILED_SOURCE=1 cscope

lkmpg1介绍2.6版本的内核模块,对于我能够建立起模块的框架,是个很好的入门读物,说清楚了

  • module和driver的关系(linux官方文档里,module_init的说明竟然在dirver目录中,让人十分迷惑),
  • 内核的哪些函数可以被module使用——整个内核的变量和函数都可以,他们在一个变量空间,暴露出符号的变量和函数见/proc/kallsyms
2021.08.18

文档见linux/Documentation/kbuild/modules.rst,可以用make htmldocspdfdocs编译。

2021.08.17

Writing a Simple Linux Kernel Module

1

https://tldp.org/LDP/lkmpg/2.6/html/index.html