通過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可以實現使用者態與核心態之間的通訊。在核心模式下,可以很方便的建立...