Time of Update: 2018-12-04
#include <signal.h>#include <stdio.h>#include <unistd.h>#include <sys/reboot.h>int main(int argc, char **argv){ /* first disable all our signals */ sigset_t set; sigfillset(&set); sigprocmask(SIG_BLOCK,
Time of Update: 2018-12-04
當我們在Vmware或者其他虛擬機器中安裝Linux後,想在XWindows與虛擬終端之間切換時,卻發現Ctrl+Alt+Fx不起作用,那麼我們如何解決這個問題呢?其實方法很簡單,我們只需要將Vmware或者其他虛擬機器軟體的熱鍵改成Ctrl+Alt+Shift即可,如Vmware具體方法如下:中文版——選擇編輯——參數——熱鍵,選擇Ctrl+Alt+Shift即可。英文版選擇edit-preferences-hotkeys選擇Ctrl+Alt+Shift
Time of Update: 2018-12-04
原始定義:include/linux/init.hQUOTE: #define __init __attribute__ ((__section__ (".init.text")))#define __initdata __attribute__ ((__section__ (".init.data")))#define __exitdata __attribute__ ((__section__(".exit.data")))#define __exit_call
Time of Update: 2018-12-04
一年一度的Linux開發人員大會上周在舊金山舉行,會上Linux基金會執行理事Jim Zemlin表示,得益於雲端運算以及其它科技潮流的出現,Linux的市場地位十分穩固,然而一些主要的維護人員已經日漸蒼老,後繼者卻還沒有成熟。 sysfs核心子系統維護者Grey Kroah-Hartman指出:“上層的人員仍然沒有變動,我們都還在,不過保持持續的人員變動是必要的,如果我們已經阻礙了Linux的發展,那麼請 告知我們。”SCSI子系統維護者James
Time of Update: 2018-12-04
system.map內容格式為:線性地址 類型 符號具體內容如下: 00100000 A phys_startup_32c0100000 T startup_32c0100000 A _text 注:表示核心代碼第一個位元組的地址c01000c6 t checkCPUtypec0100147 t is486c010014e t is386c0100199 t L6c010019b t check_x87c01001c2 t
Time of Update: 2018-12-04
在裝置驅動程式中動態開闢記憶體,不是用malloc,而是kmalloc,或者用get_free_pages直接申請頁。釋放記憶體用的是kfree,或free_pages. 對於提供了MMU(儲存管理器,輔助作業系統進行記憶體管理,提供虛真實位址轉換等硬體支援)的處理器而言,Linux提供了複雜的儲存管理系統,使得進程所能訪問的記憶體達到4GB。 進程的4GB記憶體空間被人為的分為兩個部分--使用者空間與核心空間。使用者空間地址分布從0到3GB(PAGE_OFFSET,
Time of Update: 2018-12-04
對於提供了MMU(儲存管理器,輔助作業系統進行記憶體管理,提供虛真實位址轉換等硬體支援)的處理器而言,Linux提供了複雜的儲存管理系統,使得進程所能訪問的記憶體達到4GB。 進程的4GB記憶體空間被人為的分為兩個部分--使用者空間與核心空間。使用者空間地址分布從0到3GB(PAGE_OFFSET,在0x86中它等於0xC0000000),3GB到4GB為核心空間。如所示: 核心空間中,從3G到vmalloc_start這段地址是實體記憶體映射地區(該地區中包含了核心鏡像、物理頁框表me
Time of Update: 2018-12-04
指令名稱 : chmod 使用許可權 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... 說明 : Linux/Unix 的檔案存取許可權分為三級 : 檔案擁有者、群組、其他。利用 chmod 可以藉以控制檔案如何被他人所存取。 mode : 許可權設定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中u 表示該檔案的擁有者,g 表示與該檔案的擁有者屬於同一個群體(group)者,o
Time of Update: 2018-12-04
1.kernel thread是否只有在kernel thred中才被建立?2.kernel thread無法被kill?3.在module中建立的kernel thread,用kernel_thread函數,獲得的current->mm為什麼不為0 ?4. 先看一段代碼:#include <linux/kernel.h>#include <linux/module.h>static pid_t thread_pid;static struct
Time of Update: 2018-12-04
最近一段時間在linux下用C做一些學習和開發,但是由於經驗不足,問題多多。而段錯誤就是讓我非常頭痛的一個問題。不過,目前寫一個一千行左右的代碼,也很少出現段錯誤,或者是即使出現了,也很容易找出來,並且處理掉。 那什麼是段錯誤?段錯誤為什麼是個麻煩事?以及怎麼發現程式中的段錯誤以及如何避免發生段錯誤呢? 一方面為了給自己的學習做個總結,另一方面由於至今沒有找到一個比較全面介紹這個雖然是“particular
Time of Update: 2018-12-04
linux在2.6版本以後將設定檔由原來的config.in改為kconfig,對於kconfig的文法在/Documentation/kbuild/kconfig-language.txt中做了詳細的說明,在這裡給出kconfig-language.txt的中文版。介紹----在設定資料庫的配置選項是以樹的形式組織的: +- Code maturity level options | +- Prompt for development and/or incomplete
Time of Update: 2018-12-04
函數printk的使用方法和printf相似,用於核心列印訊息。printk根據記錄層級(loglevel)對訊息進行分類。記錄層級用宏定義,記錄層級宏展開為一個字串,在編譯時間由前置處理器將它和訊息文本拼接成一個字串,因此printk 函數中記錄層級宏和格式字串間不能有逗號。 下面是兩個printk的例子,一個用於列印調試資訊,另一個用於列印臨界條件資訊。printk(KERN_DEBUG "Here I am: %s:%i/n", _ _FILE_ _, _ _LINE_ _)
Time of Update: 2018-12-04
一)彙編來源程式分析:編寫一個AT&T的組合語言程式,使程式在運行時睡眠10秒鐘原始碼如下:#include "sys/syscall.h".datasleeptime:.long 10,0.text.global _start .type _start, @function_start: movl $SYS_nanosleep, %eax movl $sleeptime, %ebx int $0x8
Time of Update: 2018-12-04
主題: linux核心模組的程式結構--模組載入函數(必須),模組卸載函數(必須),模組許可證聲明(必須),模組參數(可選),模組匯出符號(可選),模組作者的等資訊聲明(可選)一個linux核心模組主要由以下幾個部分組成。1、模組載入函數"用module_init()來指定"(必須) 當通過insmod和modprobe命令載入核心模組時,模組的載入函數會自動被核心執行,完成本模組的相關初始化工作。linux模組載入函數一般以 __init表示聲明。典型聲明如下::static int __
Time of Update: 2018-12-04
建立一個 proc 檔案根據對 proc 檔案的不同使用,核心提供了多種封裝函數來建立一個 proc 檔案。方法一:struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, struct proc_dir_entry *parent)這是最直接,封裝最少的建立方法。參數 name 是要建立的 proc 檔案名稱。mode 是該檔案許可權值,例如 S_IRUGO,可傳入0表示採用系統預設值。parent
Time of Update: 2018-12-04
常見的賦值操作兩種方法都可實現,Linux核心編程的相關書籍中看到方法一較多,周立功編寫的linux系統構建於驅動程式開發範例中見到的是方法二,於是奇怪,編寫兩種代碼實驗,都成功。賦值操作 方法一:static struct file_operations File_Ops_4_Our_Proc_File = {.read = module_output,.write = module_input,.open = module_open,.release =
Time of Update: 2018-12-04
Linux記憶體線性地址空間大小為4GB,分為2個部分:使用者空間部分(通常是3G)和核心空間部分(通常是1G)。在此我們主要關注核心地址空間部分。核心通過核心頁全域目錄來管理所有的實體記憶體,由於線性地址前3G空間為使用者使用,核心頁全域目錄前768項(剛好3G)除0、1兩項外全部為0,後256項(1G)用來管理所有的實體記憶體。核心頁全域目錄在編譯時間靜態地定義為swapper_pg_dir數組,該數組從實體記憶體地址0x101000處開始存放。由圖可見,核心線性地址空間部分從PAGE_O
Time of Update: 2018-12-04
Linux系統下的多線程遵循POSIX線程介面,稱為 pthread。編寫Linux下的多線程程式,需要使用標頭檔pthread.h,串連時需要使用庫libpthread.a。順便說一下,Linux 下pthread的實現是通過系統調用clone()來實現的。clone()是 Linux所特有的系統調用,它的使用方式類似fork,關於clone()的詳細情況,有興趣的讀者可以去查看有關文檔說明。下面我們展示一個最簡單的多線程程式
Time of Update: 2018-12-04
作業系統核心可能是微核心,也可能是單核心(後者有時稱之為宏核心Macrokernel)。按照類似封裝的形式,這些術語定義如下: 單核心:也稱為宏核心。將核心從整體上作為一個大過程實現,並同時運行在一個單獨的地址空間。所有的核心服務都在一個地址空間運行,相互之間直接調用函數,簡單高效。微核心:功能被劃分成獨立的過程,過程間通過IPC進行通訊。模組化程度高,一個服務失效不會影響另外一個服務。Linux是一個單核心結構,同時又吸收了微核心的優點:模組化設計,支援動態裝載核心模組。Linux還避免
Time of Update: 2018-12-04
慶祝 Linux 成功 10 年 Linux技術、開發模型和社區都對 IT 業產生了重要的影響,我們能做的就是站到一邊看看這些,很高興與 developerWorks 一起度過了第一個 10 年。Linux 團隊已經將這些對 Linux 產生重大影響的內容整理到一起。CONTENT GOES HERE-->過去 10 年裡,Linux 發生了太多的事情,很難完整地列出該作業系統的重要事件和技術改進。儘管如此,為了慶祝我們的十歲生日,Linux