カーネル モジュールからデバイスを読み取りたい。出力は、「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で検索しましたが、役に立ちません。助けてください。