Time of Update: 2018-12-05
在看linux代碼時,很多驅動的init函數裡面都有類似core_initcall,subsys_initcall的宏,一開始可能不明白這些宏是做什麼用的,後來可能猜得出是核心初始化時調用的,再後來可能對核心如何調用這些初始化的宏感興趣,這裡就總結一下,權當備忘。前言 宏定義__define_initcall(level,fn)對於核心的初始化很重要,它指示 編譯器在編譯的時候,將一系列初始化函數的起始地址值按照一定的順序
Time of Update: 2018-12-05
gdb能為我們做些什麼:之前有篇文章稍微介紹了點debug工具-gdb的工作原理。我們可能對gdb如何發揮作用有了一些瞭解,可問起gdb能為我們做些什麼時,可能大多數人除了偵錯工具外,難以有一個具體點的回答,這篇文章也就權當做一個小總結,讓我們除了知道攪拌機是如何工作的,還知道用攪拌機能解決些什麼問題。本文很多內容來自Jim
Time of Update: 2018-12-05
該網卡了,之前一直不敢接觸的一塊。先簡單化在複雜化吧,可以提綱挈領,一覽全域。0,簡介1,架構2,實現 0,簡介網卡裝置在Linux的地位比較特殊,不同於其他裝置,網卡裝置沒有特定的檔案對應,Linux對他做了專門的處理。Linux的網路裝置子系統主要是基於Unix的Socket機制。在系統和驅動程式之間定義有專門的資料結構(sk_buff)進行資料的傳輸。網路子系統主要關注三個方面:1,發送和接收2,中斷3,時鐘
Time of Update: 2018-12-05
最近調查了MUSB的一個問題,將USB這塊的架構簡單梳理了一下,趁熱這次做下記錄,能提綱挈領即可/*****************************************************************/目錄0,背景1,USB 子系統結構2,USB
Time of Update: 2018-12-05
處理過幾個串口的問題,這幾天才稍微有了些時間來整理一下這一塊的東西。目錄暫時大致分為以下幾部分吧:0,背景1,串口驅動的結構2,串口驅動的實現3,關於TTY core---------------------------------------------------------------------------------------------------0,背景往常review這塊代碼的時候,經常會被linux代碼樹中東一片西一片的uart,tty,serial
Time of Update: 2018-12-05
25[ 標籤:linux,鏈表函數 ]在學習核心鏈表時,有下列函數希望比較懂的人來回答以下這些函數及結構體的作用struct list_head
Time of Update: 2018-12-05
該篇不屬於原創,主要是最近解決了一個I2C的問題,期間看了很多大俠的博文,現在將這個子系統整理一下。整個I2C framework, eric.xiao大俠做了很詳盡的敘述,給了我很大協助,在此表示感謝,好像也是成都的,有緣....++++++++++++++++++++++++++++++++++++ 這裡用稍微“粗俗”一點的語言稍微記錄一下,方便記憶即可, i2c 驅動架構套件含三層:1,i2c core:提供通用的一些方法和通訊演算法供i2c bus操作使用,這是與具體硬體無關的一層。2,
Time of Update: 2018-12-05
http://article.pchome.net/content-323089.html1.以下是我在網上看到的: 有時候我們要計算程式執行的時間.比如我們要對演算法進行時間分析 ..這個時候可以使用下面這個函數. #include <sys/time.h> int gettimeofday(struct timeval *tv,struct timezone *tz); strut timeval { long tv_sec; /* 秒數 */ long tv_usec; /*
Time of Update: 2018-12-05
轉載來自:http://blog.sina.com.cn/s/blog_3d24e30d01000b41.html 在我的T60上安裝了Red Hat Enterprise Linux
Time of Update: 2018-12-05
環境變數是和Shell緊密相關的,使用者登入系統後就啟動了一個Shell。對於Linux來說一般是bash,但也可以重新設定或切換到其它的
Time of Update: 2018-12-05
In this article we will dive into system call interface implementation in arm linux(with gnu eabi).我們將從bionic中的open函數開始追溯arm linux的系統調用實現(使用gnu eabi)。Linux的應用程式要想訪問核心必須使用系統調用從而實現從usr模式轉到svc模式。在arm中,這個過程是通過swi(或者和它等價的指令)來實現模式轉換的。從bionic
Time of Update: 2018-12-05
中斷機制的核心資料結構是 irq_desc,它完整地描述了一條中斷線(或稱為“中斷通道” ) 。irq_desc 結構在 include/linux/irq.h 中定義在 kernel/irq/handle.c 中有個全域 irq_desc 數組,描述了系統中所有的中斷線:handle_irq,這是個函數指標,指向的是一個高層次的中斷事件處理函數,定義了處理中斷事件的一種策略。在 kernel/irq/chip.c 中實現了 5
Time of Update: 2018-12-05
什麼是非強制中斷機制?Linux中的非強制中斷機制用於系統中對時間要求最嚴格以及最重要的中斷下半部進行使用。在系統設計過程中,大家都清楚中斷上下文不能處理太多的事情,需要快速的返回,否則很容易導致中斷事件的丟失,所以這就產生了一個問題:中斷髮生之後的交易處理由誰來完成?在前背景程式中,由於只有中斷上下文和一個任務上下文,所以中斷上下文觸發事件,設定標記位,任務上下文迴圈掃描標記位,執行相應的動作,也就是中斷髮生之後的事情由任務來完成了,只不過任務上下文採用掃描的方式,即時性不能得到保證。在Li
Time of Update: 2018-12-05
1.platform匯流排、裝置與驅動在Linux
Time of Update: 2018-12-05
Bootloader與核心的互動 Bootloader與核心的互動是單向的,Bootloader將各類參數傳給核心。由於它們不能同時運行,傳遞辦法只有一個:Bootloader將參數放在某個約定的地方之後,再啟動核心,核心啟動後從這個地方獲得參數。除了約定好參數存放的地址外,還要規定參數的結構。Linux 2.4.x 以後的核心都期望以標記列表(tagged list)的形式來傳遞啟動參數。標記,就是一種資料結構;標記列表,就是挨著存放的多個標記。標記列表以標記ATAG_CORE
Time of Update: 2018-12-05
一、邏輯地址轉線性地址 機器語言指令中出現的記憶體位址,都是邏輯地址,需要轉換成線性地址,再經過MMU(CPU中的記憶體管理單元)轉換成物理地址才能夠被訪問到。我們寫個最簡單的hello world程式,用gccs編譯,再反編譯後會看到以下指令:mov 0x80495b0, %eax這裡的記憶體位址0x80495b0 就是一個邏輯地址,必須加上隱含的DS 資料區段的基地址,才能構成線性地址。也就是說 0x80495b0
Time of Update: 2018-12-05
理解 Linux 使用的記憶體模型是從更大程度上掌握 Linux 設計和實現的第一步,因此本文將概述 Linux 記憶體模型和管理。 Linux 使用的是單一整體式結構 (Monolithic),其中定義了一組原語或系統調用以實現作業系統的服務,例如在幾個模組中以超級模式啟動並執行進程管理、並發控制和記憶體管理服務。儘管出於相容性考慮,Linux 依然將段控制單元模型 (segment control unit model)
Time of Update: 2018-12-05
這是我們作業系統的大作業。原理就是inline hook 那個 proc 檔案系統,根目錄下的 readdir 的函數。替換掉第三個參數,filldir。代碼爆短,60來行。Ubuntu 10.04
Time of Update: 2018-12-05
(1) NFS的配置:首先在shell執行setup,快顯功能表介面後,選中System services,斷行符號進入系統服務選項菜單,在其中選中 [*]nfs ,然後退出.(2) vim /etc/exportsNfs伺服器的配置,設定檔/etc/exports:Exports檔案中一些選項的含義選項 說明Ro 該主機對該共用目錄有唯讀許可權Rw
Time of Update: 2018-12-05
基本概念 庫有動態與靜態兩種,動態通常用.so為尾碼,靜態用.a為尾碼。例如:libhello.so libhello.a 為了在同一系統中使用不同版本的庫,可以在庫檔案名稱後加上版本號碼為尾碼,例如: libhello.so.1.0,由於程式串連預設以.so為檔案尾碼名。所以為了使用這些庫,通常使用建立符號串連的方式。 ln -s libhello.so.1.0 libhello.so.1 ln -s libhello.so.1 libhello.so 使用庫 當