原创 內核線程kthreadd詳解

linux在初始化的時候,除了靜態的idle線程,還會創建kernel_init線程和kthreadd線程。kthreadd線程爲2號線程,該線程專門用來負責爲kernel創建其他線程。下面看一下如何利用kthreadd創建一個內核線程。

原创 C語言 目標文件和可執行文件(ELF文件)

1.C語言創建程序 1.1C語言創建(分爲4個步驟) 編輯 編譯 鏈接 執行 編輯:就是創建和修改C程序的源代碼-我們編寫的程序稱爲源代碼。編譯:就是將源代碼轉換爲機器語言。編譯器的輸出結果成爲目標代碼,存放它們的文件稱爲目標文件。擴展名

原创 linux 設備文件節點的創建(一)udev和mdev

1概述 內核嚮應用層發送事件,通知用戶層在/dev目錄下面創建設備節點的api爲kobject_uevent_env。總共有兩種方式來向用戶層發起事件。 (1)用netlink發送uevent消息, (2)調用uevent_helper,

原创 Linux 塊設備原理(二)以ext2文件系統爲例分析塊設備工作原理

在上一篇文章中,分析瞭如何去寫一個基於MTD的flash驅動,大概分析了整個註冊流程。整個塊驅動就工作起來了。那麼文件的讀寫,與塊驅動的關係。文件系統與塊驅動的關係,到底是怎麼樣的呢。這個問題還是值得研究一下的。本文主要分析vfs層到fl

原创 linux調度器源碼分析 (四)- 調度原理

在前面的概述裏說到過,調度分爲週期性調度和特定時刻調度。 1 週期性調度 系統啓動調度器初始化時會初始化一個調度定時器,定時器每隔一定時間產生一箇中斷,即一個滴答,在中斷會對當前運行進程運行時間進行更新,如果進程需要被調度,在調度定時器中

原创 linux sys_dup

sys_dup()的主要工作就是用來“複製”一個打開的文件號,使兩個文件號都指向同一個文件。先看一下涉及到的數據結構: 1 數據結構 在Linux中每一個進程的數據是存儲在一個task_struct結構(定義在sched.h中)中的。

原创 linux initramfs啓動原理

當linux選擇支持initramfs方式啓動,並且在initramfs source file中選擇了要打包的rootfs路徑以後,則會嘗試以initramfs方式啓動。initramfs方式會對rootfs進行壓縮,和linux ke

原创 ramfs文件系統的讀寫原理

在看initramfs方式啓動linux的時候,需要把文件解壓到rootfs文件系統中。比較困惑這些文件是如何寫到rootfs文件系統中的,所以決定研究一下rootfs根文件系統的讀寫方式。linux初始化的時候,第一個掛載的根文件系統本

原创 嵌入式linux 系統iptables 編譯及安裝

1 iptables下載 iptables可以從該網站進行下載: https://www.netfilter.org/projects/iptables/downloads.html 這裏使用的linux內核爲3.10版本的,iptabl

原创 linux 設備文件節點的創建(三)/dev設備節點的創建及打開

繼續上一篇的分析,應用層udev或者mdev獲取到內核的事件,來創建設備文件的時候,實際就是調用mknod命令進行節點創建。我們可以模仿udev或者mdev,來手動創建這個節點。 1 /dev設備節點創建 我們在使用命令: mknod /

原创 linux調度器源碼分析(二) - 初始化

每個CPU(多核COU中的每個核)都有自己的struct rq隊列,而rq隊列中又有着自己的struct cfs_rq和struct rt_rq。在初始化時就是對這三個結構進行初始化。 1 init_task和init進程 在start_

原创 Linux內核同步機制之(二):spin lock

一、前言 在linux kernel的實現中,經常會遇到這樣的場景:共享數據被中斷上下文和進程上下文訪問,該如何保護呢?如果只有進程上下文的訪問,那麼可以考慮使用semaphore或者mutex的鎖機制,但是現在中斷上下文也參和進來,那些

原创 device tree 詳解

在學習device tree的時候,在網上找到幾篇寫的比較不錯的文章。記錄一下,以便以後及時回顧。 一個是wowo科技的系列文章: Device Tree(一):背景介紹 http://www.wowotech.net/linux_ken

原创 linux3.10 系統start_kernel初始化流程詳解(二)

(20)jump_label_init(); 這邊是個空函數,不做處理 (21)setup_log_buf(0); 這個函數如果初始化了new_log_buf_len變量,則爲log buf 分配空間,可以看到他的定義方式: ear

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

1 poll的使用 相對於select來說,poll 也是在指定時間內論詢一定數量的文件描述符,來測試其中是否有就緒的,不過,poll 提供了一個易用的方法,來實現 i/o 複用。 聲明如下: #include <poll.h> int