1. 程式人生 > >Linux 核心啟動資訊的列印 --- dev_driver_string函式/dev_name函式

Linux 核心啟動資訊的列印 --- dev_driver_string函式/dev_name函式

核心啟動時,常會打印出一些資訊:開頭是 "驅動模組的名字: + 具體的資訊"

如:在執行的linux系統裝置上,插入滑鼠,就會打印出滑鼠的相關資訊;

[  402.134068] input: USB Optical Mouse as /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/0003:0461:4D81.0003/input/input3
[  402.149618] hid-generic 0003:0461:4D81.0003: input: USB HID v1.11 Mouse [USB Optical Mouse] on usb-ci_hdrc.0-1/input0

紅色標註的 "input: " 是滑鼠插入式,核心檢測到,滑鼠是輸入裝置,於是就把將滑鼠與輸入模組的驅動。

紅色標註的"hid-generic 0003:0461:4D81.0003" 是滑鼠匹配的驅動是輸入模組的hid-generic驅動。

這樣的資訊輸出通常都是有 dev_info/dev_err/dev_notice/...., 具體可參考:linux/include/linux/device.h檔案中這些函式的定義。

這些函式的定義格式都是相同的,只是輸出等級不同,即print_level不同。

dev_info(dev, “%s[%d] \n”, __func__, __LINE__);

這是第一個引數不同,後兩個就是printk的引數相同,格式也相同。

第一個引數dev: 就是將這個裝置的模組的名字等資訊相同, 最終還是呼叫printk打印出來.

通常,dev第一個引數的打資訊,是用兩個函式從dev中獲取資訊。

const char *dev_driver_string(const struct device *dev)
{
        struct device_driver *drv;


        /* dev->driver can change to NULL underneath us because of unbinding,
         * so be careful about accessing it.  dev->bus and dev->class should
         * never change once they are set, so they don't need special care.
         */
        drv = ACCESS_ONCE(dev->driver);
        return drv ? drv->name :
                        (dev->bus ? dev->bus->name :
                        (dev->class ? dev->class->name : ""));

}

呼叫這個函式可以輸出 "hid-generic"

static inline const char *dev_name(const struct device *dev)
{
        /* Use the init name until the kobject becomes available */
        if (dev->init_name)
                return dev->init_name;


        return kobject_name(&dev->kobj);

}

呼叫這個函式,可以輸出" 0003: ......"

dev_driver_string() / dev_name() 是核心除錯列印資訊中常用的輸出函式

相關推薦

Linux 核心啟動資訊列印 --- dev_driver_string函式/dev_name函式

核心啟動時,常會打印出一些資訊:開頭是 "驅動模組的名字: + 具體的資訊"如:在執行的linux系統裝置上,插入滑鼠,就會打印出滑鼠的相關資訊;[ 402.134068] input: USB Optical Mouse as /devices/soc0/soc/2100

Linux核心啟動資訊能過串列埠輸出

只需要在GRUB的配置檔案中加上核心引數 console=tty0 console=ttyS0,115200,如下 linux    /boot/vmlinuz-3.0.0-15-generic root=UUID=eb9f0676-556e-42c2-9681-52d7c

Linux核心啟動第二階段之setup_arch函式分析

轉自:http://blog.chinaunix.net/uid-20672257-id-2383451.html 執行setup_arch()函式 回到start_kernel當中,569行,呼叫setup_arch函式,傳給他的引數是

控制Linux核心啟動中的列印

如果正常配置了輸入輸出終端,則核心啟動過程中會將很多資訊輸出到控制檯上。這些資訊中有些表示嚴重錯誤,有些只是一般的提示資訊。 在平臺成熟後,繼續保留這些資訊既不美觀,也會影響啟動速度(串列埠的波特率很低)。因此要儘量遮蔽不重要的資訊。這需要對核心進行一些改造。

Linux核心啟動顯示時間資訊

在最開始移植Linux核心的時候,發現自己配置的核心編譯出來啟動資訊十分的雜亂無章。但是廠家提供的Linux映象檔案下載到開發板中,列印的資訊十分清晰。它在列印核心啟動資訊之前都會先列印一個時間資訊出來! 下面來看看怎麼配置Linux核心: 首先在Linux核心檔案下,執行

Linux核心啟動函式start_kernel的簡單分析

歐長坤 原創作品轉載請註明出處 《Linux核心分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000 這學期學校恰好有作業系統的課程,上個學習就開始尋思研究研究Linux核心程式碼,恰好MOOC有這個

linux核心啟動2_setup_arch函式

執行setup_arch()函式 回到start_kernel當中,569行,呼叫setup_arch函式,傳給他的引數是那個未被初始化的內部變數command_line。這個setup_arch()函式是start_kernel階段最重要的一個函式,每個體系

如何調整Linux核心啟動中的驅動初始化順序-驅動載入優先順序

轉載自:http://zhidao.baidu.com/link?url=adCsiTiI7i3QVYrTx19jkt_FvBV2VlQ4NV18pEu6Kdi4Yhv0ryauD3LHj1pxGE-YP8M_PxZnHNy-hVKBvzJOkPfqehZmR9CQm5GZ5XZDx-O Lin

Linux核心啟動過程分析(十)-----RTC驅動分析

參考https://blog.csdn.net/xuao20060793/article/details/46433263這篇博文 RTC驅動分析: Class.c (drivers\rtc):subsys_initcall(rtc_init); static int __init

Linux 檔案目錄資訊列印stat+dirent

stat的基本使用: 所需標頭檔案: #include<sys/types.h>,#include<sys/stat.h>,#include<unistd.h> 函式原型:       int stat(const char *pat

Linux核心啟動流程分析(一)

1. 依據arch/arm/kernel/vmlinux.lds 生成linux核心原始碼根目錄下的vmlinux,這個vmlinux屬於未壓縮,帶除錯資訊、符號表的最初的核心,大小約23MB;  命令:arm-linux-gnu-ld -o vmlinux -T a

linux核心啟動中的初始化

                轉自 http://blog.csdn.net/mayaoyao11/article/details/6636977 【問題】 此處我要實現的是將晶片的ID用於網絡卡MAC地址,網絡卡驅動是enc28j60_init。 但是,讀取晶片ID的函式,在as352x_afe

Linux 核心網路協議棧 ------ 擁塞避免處理函式 tcp_reno_cong_avoid

慢啟動和快速重傳擁塞避免演算法,函式tcp_reno_cong_avoid 在“慢開始”階段,每收到一個ACK,cwnd++一次,那麼一個RTT之後,cwnd就會加倍 擁塞避免階段,其實就是在一個RTT時間內將cwnd++一次( 注意在不丟包的情況下 ) /* *

omapl138移植uboot系列之修改移植TI官方移植的Linux核心(啟動核心第二篇)

修改Linux核心原始碼     實際上,剛剛我們已經成功的啟動了TI移植過的Linux核心,但是從串列埠控制檯的現象來看,“Starting Kernel”之後什麼資訊都沒有輸出,這就需要我們在TI移植過的核心原始碼之上進行相應修改,以適合我們的639A板卡。

Android 8.0 系統啟動流程之Linux核心啟動--kernel_init程序(三)

    在上一篇文章中詳細的分析了kthreadd程序的啟動,init程序也是有idle程序去觸發啟動的,init程序分為前後兩部分,前一部分是在核心啟動的,主要是完成建立和核心初始化工作,內容都是跟Linux核心相關的;後一部分是在使用者空間啟動的,主要完成A

linux 核心啟動錯誤和selinux引數 Kernel panic -not syncing:Attempted to kill init

今天在裝某個軟體的時候,修改了selinux引數。修改selinux 的某個引數值為Disable。導致 linux系統不能啟動。出現如下錯誤 Kernel panic -not syncing:Attempted to kill init! 後經過向群友請教和

國嵌視訊學習---linux核心啟動流程

一、核心檔案uImage的構成 uImage:Uboot header和zImage zImage:解壓程式碼和壓縮後的vmlinux映象 二、zImage核心的構成 其中解壓程式碼由Head.s和misc.s組成。 三、vmlinux核心構成 1.啟動程式碼部分:

如何在Linux核心中將輸出列印到終端

#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/sched.h>#include <linu

Linux核心啟動過程概述 Linux核心啟動過程概述

Linux核心啟動過程概述    版權宣告:本文原創,轉載需宣告作者ID和原文連結地址。     Hi!大家好,我是CrazyCatJack。今天給大家帶來的是Linux核心啟動過程概述。希望能夠幫助大家更好的理解Linux核心的啟動,並且創造出自己的核

qemu把核心啟動訊息列印到視窗

舉例: qemu -nographic -kernel linux-4.17.11/arch/x86/boot/bzImage -initrd myinitrd4M.img -append "root=/dev/ram init=/init console=ttyS0"