列印到proc虛擬檔案

2021-10-03 06:00:15 字數 3659 閱讀 9959

通過dmsge或cat/proc/kmsg可檢視列印資訊

cat proc/kmsg

<6>booting linux on physical cpu 0x0

<6>initializing cgroup subsys cpu

<5>linux version 3.18.20 (osrc@osrc)

(gcc version 4.9.4 20150629 (prerelease)

(hisilicon_v500_20170922)

)#25 smp mon jan 13 02:11:11 est 2020

<6>cpu: armv7 processor [410fc075] revision 5 (armv7), cr=10c5387d

<6>cpu: pipt / vipt nonaliasing data cache, vipt aliasing instruction cache

<6>machine model: hisilicon hi3519v101 demo board

<6>cmz zone is not set!

<6>cma: reserved 16 mib at 0x85000000

<6>memory policy: data cache writealloc

<7>on node 0 totalpages: 24576

為列印級別

//參考 fs/proc/kmsg.c

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define mylog_buf_len 1024

static

declare_wait_queue_head

(mylog_waitq)

;static

char mylog_buf[mylog_buf_len]

;static

char tmp_buf[mylog_buf_len]

;static

int mylog_r =

0, mylog_w =0;

//判斷空

static

intis_mylog_empty

(void

)//判斷滿

static

intis_mylog_full

(void

)//寫入資料

static

void

mylog_putc

(char c)

//讀出資料

static

intmylog_getc

(char

*p)int

myprintk

(const

char

*fmt,..

.)static ssize_t mymsg_read

(struct file *file,

char __user *buf, size_t count, loff_t *ppos)if(

!error)

error = i;

return error;

}const

struct file_operations proc_mymsg_operations =

;static

intmymsg_init

(void

)static

void

mymsg_exit

(void

)module_init

(mymsg_init)

;module_exit

(mymsg_exit)

;export_symbol

(myprintk)

;module_license

("gpl"

);

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

extern

intmyprintk

(const

char

*fmt,..

.);// 操作管腳為gpio3_2

// 管腳復用暫存器預設為gpio,這裡就不去操作了

#define led_phy_base 0x12143000

//led管腳實體地址

#define led_phy_data 0x010

//led管腳資料偏移位址,0b00_0001_0000

#define gpio_phy_dir 0x400

//管腳方向暫存器偏移位址

#define gpio_out 0x4

//gpio3_2 配置為輸出,1輸出 0輸入def

#define gpio_out_h 0xff

#define gpio_out_l 0x00

static

struct class *leddrv_class;

static

struct class_device *leddrv_class_dev;

static

void __iomem *led_base;

//暫存器基位址

static

void __iomem *led_dir;

//方向

static

intled_drv_open

(struct inode *inode,

struct file *filp)

static

intled_drv_write

(struct file *file,

const

char __user *buf, size_t count, loff_t *ppos)

else

return0;

}static

struct file_operations led_drv_fops =

;int major;

intled_drv_init

(void

)void

led_drv_exit

(void

)module_init

(led_drv_init)

;//模組初始化介面

module_exit

(led_drv_exit)

;//模組推出介面

module_license

("gpl"

);

只能cat一次

insmod mymsg.ko

insmod test_myprintk.ko

cat proc/mymsg

led_base = 0xfea43010

led_dir = 0xfea43400

《驅動除錯 除錯資訊列印到proc虛擬檔案》

printk 會將列印資訊存在核心的環形緩衝區log buf裡,可以通過dmesg命令來檢視log buf 1.環形緩衝區log buf又是存在核心的哪個檔案呢?位於 proc kmsg裡,所以除了dmesg命令檢視,也可以使用cat proc kmsg來檢視。2.但是,dmesg命令和cat pr...

虛擬檔案系統proc

proc 檔案系統是 gnu linux 特有的。它是乙個虛擬的檔案系統,因此在該目錄中的所有檔案都不會消耗磁碟空間。通過它能夠非常簡便地了解系統資訊,尤其是其中的大部分檔案是人類可閱讀的 不過還是需要一些幫助 許多程式實際上只是從 proc 的檔案中收集資訊,然後按照它們自己的格式組織後顯示出來。...

proc 虛擬檔案系統 例項

linux下有乙個神奇的目錄 proc,經常會執行 cat proc cpuinfo 命令檢視cpu資訊,proc下的確有cpuinfo檔案,但是這個檔案不是物理存在的,是軟體虛擬出來的,與普通檔案不同,該檔案是動態的。通過 proc可以實現使用者態與核心態之間的通訊。在核心模式下,可以很方便的建立...