0

カーネル モジュールからデバイスを読み取りたい。出力は、「ls」コマンドの出力に似ているはずです

私の読み取り機能は次のとおりです。

static void read_file(char *filename)
{
  struct file *fd;
  char buf[1];
  unsigned long long offset=0;
  mm_segment_t old_fs = get_fs();
  set_fs(KERNEL_DS);

  fd = filp_open(filename, O_RDONLY, 0);
  if (fd >= 0) {
    printk(KERN_DEBUG);
    while (vfs_read(fd, buf, 1,&offset) == 1)
      {

    if((0 <= buf[0]) && (buf[0] <=255))
      printk("%c", buf[0]);
      } 
        printk(KERN_ALERT "Loop Ran\n");
    filp_close(fd,NULL);
  }

  set_fs(old_fs);
}

しかし、多くのガベージ値とともに出力を提供しています。マウント ディレクトリに「file1」という名前のファイルがあります。

o/p は (「lost+found」と「file1」が含まれていますが、これらのガベージ値が含まれています)

[

  558.452235] 
[  558.452238] (\x02[&  \x01  \x05\x1dQ\x04S\x01,Q\x01
                                                      8\x02\x01
                                                               -\x06AN\x0ex\x7f
[  558.452308] 'J6pA{h<;
                        \x01
                            ,Q\x01*+,'\x1f\x04\x02\x04* + , 4\x07\x05\x04\x03 \x04 \x05 \x06 \x07 \x08   
[  558.455546]  

 \x0e \x0f \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19 \x1a \x1b \x1c \x1d \x1e \x1f   ! " # $ % & ' ( ) 

    \x01\x0f,Q,Q,QA\x04\x1dQCQCQ\x03\x020\x04\x04,Q,Q,Q\x01A0,Q,Q,Q\x02\x18CQCQCQ\x01Z\x02
                                         \x01\x02.\x02
                                                      \x02\x02..
                                                                \x14
    [  558.525090] \x02lost+found
                                 \x03\x05\x01file1

                                                  \x01\x02.\x02\x03\x02\x02..\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x03\x04\x05\x06\x07\x08   
    [  558.529810] 

    \x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()
    [  561.391843] (\x02[&  \x01  \x05,QS\x01,Q\x01
                                                   \x018\x02\x01
                                                                -\x06AN\x0ex\x7f
    [  561.391914] 'J6pA{h<;
                            \x01
                                ,Q\x01*+,'\x1f\x04\x02\x04* + , 4\x07\x05\x04\x07
    [  562.125651] Loop Ran

しかし、bash の「ls」コマンドと同様の出力が必要です。ファイルとディレクトリのクリーンな名前を示します。Googleで検索しましたが、役に立ちません。助けてください。

4

0 に答える 0