原创 linux select的使用及其原理實現

linux select和poll的實現機制其實是類似的,而且最終都會使用到內核驅動提供的具體poll方法,poll的使用詳解參考這篇文章: https://blog.csdn.net/oqqYuJi12345678/article/de

原创 repo的基本使用

repo下的本地開發流程 1.1 單分支開發:    1 本地新建工作目錄並初始化repo庫: repo init;    2 下載代碼(只取服務器當前分支): repo sync -c;    3 創建本地分支: repo start

原创 linux 內核等待隊列機制原理分析

1.       等待隊列數據結構 等待隊列由雙向鏈表實現,其元素包括指向進程描述符的指針。每個等待隊列都有一個等待隊列頭(wait queue head),等待隊列頭是一個類型爲wait_queque_head_t的數據結構: str

原创 linux netlink機制詳解

netlink是一種基於網絡的機制,允許在內核內部以及內核與用戶層之間進行通信。最早在內核2.2引入,旨在替代笨拙的IOCTL,IOCTL不能從內核向用戶空間發送異步消息,而且必須定義IOCTL號。 Netlink協議定義在RFC3549

原创 linux系統加載elf可執行文件源碼分析

本文源碼基於linux3.10. 1 elf文件的組成 elf文件可以是可執行程序,可以是目標文件(.o),也可以是動態庫,也可以是靜態庫。可執行文件根據編譯方式的不同,又分爲靜態編譯和動態編譯。 靜態鏈接和動態鏈接的elf可執行文件在系

原创 linux3.10 虛擬文件系統初始化

start_kernel           ----------->vfs_caches_init void __init vfs_caches_init(unsigned long mempages) { unsigned lon

原创 linux 3.10 Pid hash 鏈表

pid,即process ID,進程ID。 內核在初始化的時候有一個函數爲pidhash_init,這個函數要做什麼呢? 我們都知道,我們可能在很多情況下,都想知道進程的一些狀態,在這種情況,內核必須能夠從進程的PID導出對應的進程描述符

原创 Linux內核同步機制之(一):原子操作

一、源由 我們的程序邏輯經常遇到這樣的操作序列: 1、讀一個位於memory中的變量的值到寄存器中 2、修改該變量的值(也就是修改寄存器中的值) 3、將寄存器中的數值寫回memory中的變量值 如果這個操作序列是串行化的操作(在一個thr

原创 linux3.10 proc文件系統實現原理

1 主要數據結構 我們列舉某個proc目錄,其與虛擬文件系統的數據結構關係如下: 文件或者目錄打開的時候會爲虛擬文件系統創建inode,對於proc文件系統,inode結構包含於結構體proc_inode,用於連接vfs: struc

原创 Linux 塊設備原理(一)Nand Flash驅動(分析MTD層並製作NAND驅動)

1.本節使用的nand flash型號爲K9F2G08U0M,它的命令如下:                   硬件電路圖大概如下:                                                 1.1

原创 linux 設備文件節點的創建(二)以一個簡單字符驅動爲例分析創建過程

linux設備在註冊的時候,創建相應的設備節點,這個過程其實是相當複雜的。下面從一個簡單的例子開始,分析這個創建過程具體是什麼樣子的。 1 簡單字符設備驅動 #include <linux/kernel.h> #include <lin

原创 linux調度器源碼分析(三) - 新進程加入

這篇文章主要說明系統如何把一個進程加入到隊列中。 1 加入時機 只有處於TASK_RUNNING狀態下的進程才能夠加入到調度器,其他狀態都不行,也就說明了,當一個進程處於睡眠、掛起狀態的時候是不存在於調度器中的,而進程加入調度器的時機如下

原创 linux 在內核模塊調用應用層程序

在介紹實現原理之前,先看一個簡單的例子,在內核中如何使用相關的api調用用戶層程序。 1 一個簡單例子 內核模塊代碼 #include <linux/module.h> #include <linux/init.h> #include

原创 linux do_initcalls

linux初始化的時候,會在do_initcalls中做很多初始化的工作。把裏面的初始化函數打印出來,大概如下: -------------- #define pure_initcall(fn) __define_ini

原创 linux do_fork詳解

當內核調用kernel_thread函數創建內核線程或者應用程序系統調用fork創建進程以及使用pthread_create創建線程的時候,其在內核中最終調用的函數就是do_fork。 do_fork這個函數非常複雜,這邊只介紹裏面的兩個