私はドライバープログラミングの初心者です。簡単なcharドライバーを書き始めました。次に、charドライバーmknod / dev / simple-driver c2500用の特別なファイルを作成しました。cat /dev/simple-driverと入力した場合。文字列「HelloworldfromKernelmode!」が表示されます。私はその機能を知っています
static const char g_s_Hello_World_string[] = "Hello world tamil_vanan!\n\0";
static const ssize_t g_s_Hello_World_size = sizeof(g_s_Hello_World_string);
static ssize_t device_file_read(
struct file *file_ptr
, char __user *user_buffer
, size_t count
, loff_t *possition)
{
printk( KERN_NOTICE "Simple-driver: Device file is read at offset =
%i, read bytes count = %u", (int)*possition , (unsigned int)count );
if( *possition >= g_s_Hello_World_size )
return 0;
if( *possition + count > g_s_Hello_World_size )
count = g_s_Hello_World_size - *possition;
if( copy_to_user(user_buffer, g_s_Hello_World_string + *possition, count) != 0 )
return -EFAULT;
*possition += count;
return count;
}
と呼ばれます。これは、ドライバーのfile_opreation構造体の(* read)にマップされます。私の質問は、この関数がどのように呼び出されるか、struct file、char、count、offsetなどのパラメーターがどのように渡されるかです。これがどのように起こっているか