Saya tahu semua diskusi tentang mengapa seseorang tidak boleh membaca / menulis file dari kernel, melainkan bagaimana menggunakan / proc atau netlink untuk melakukan itu. Saya tetap ingin membaca / menulis. Saya juga membaca Driving Me Nuts - Things You Never Should Do in the Kernel .
Namun, masalahnya adalah 2.6.30 tidak dapat mengekspor sys_read()
. Melainkan dibungkus SYSCALL_DEFINE3
. Jadi jika saya menggunakannya di modul saya, saya mendapatkan peringatan berikut:
WARNING: "sys_read" [xxx.ko] undefined!
WARNING: "sys_open" [xxx.ko] undefined!
Jelas insmod
tidak dapat memuat modul karena penautan tidak terjadi dengan benar.
Pertanyaan:
- Bagaimana membaca / menulis dalam kernel setelah 2.6.22 (di mana
sys_read()
/sys_open()
tidak diekspor)? - Secara umum, bagaimana menggunakan panggilan sistem yang dibungkus dalam makro
SYSCALL_DEFINEn()
dari dalam kernel?
sumber
Sejak kernel Linux versi 4.14,
vfs_read
danvfs_write
fungsi tidak lagi diekspor untuk digunakan dalam modul. Sebagai gantinya, fungsi khusus untuk akses file kernel disediakan:Juga,
filp_open
tidak lagi menerima string ruang pengguna, sehingga dapat digunakan untuk akses kernel secara langsung (tanpa menari denganset_fs
).sumber