差異處
這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 | ||
cpp:linux_kernel:show_physical_address [2017/10/14 16:37] tony [Source Code] |
cpp:linux_kernel:show_physical_address [2023/06/25 09:48] (目前版本) |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | {{tag>Linux Linux-kernel}} | ||
====== Show Physical Memory Address of the kernel module ====== | ====== Show Physical Memory Address of the kernel module ====== | ||
===== Introduction ===== | ===== Introduction ===== | ||
- | 我希望透過寫一個kernel module,做以下事情: | + | 我希望透過寫一個kernel module,讓user在user space去顯示kernel space某個變數值的實體記憶體位置與數值。 |
- | - 宣告一個global variable。 | + | \\ |
- | - init時,初始此variable。 | + | |
- | - 執行file_operations: open時,會打印出此變數的實體記憶體位置。 | + | |
- | - exit時,釋放此variable。 | + | |
\\ | \\ | ||
Note: 由於這程式僅用於測試,因此不會特別去考慮更好的寫法;會補充這點是由於看書有看到更好的寫法。 | Note: 由於這程式僅用於測試,因此不會特別去考慮更好的寫法;會補充這點是由於看書有看到更好的寫法。 | ||
行 86: | 行 84: | ||
make -C $(KERNEL_DIR) M=$(PWD) clean | make -C $(KERNEL_DIR) M=$(PWD) clean | ||
</code> | </code> | ||
+ | 起初我是在centos 7.3上寫,安裝了7.4的kernel header;編譯正常,但載入模組時,會出現Unkown symbol page offset base。最後裝7.3的kernel header就可以正常載入。 | ||
==== Test Script ==== | ==== Test Script ==== | ||
+ | 請記得先執行mknod /dev/hello c 187 0去建立裝置檔案,接著就可以透過cat去操作,然後使用demsg看到結果: | ||
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
行 102: | 行 102: | ||
* [[http://blog.csdn.net/freenaut/article/details/4298174|字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()]] | * [[http://blog.csdn.net/freenaut/article/details/4298174|字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()]] | ||
+ | ===== ===== | ||
+ | ---- | ||
+ | \\ | ||
+ | ~~DISQUS~~ |