原创 移植u-boot到樹莓派

u-boot:官網下載的u-boot-2014.4(ftp://ftp.denx.de/pub/u-boot/) 單板:樹莓派b 1、 添加自己的單板 首先解壓uboot源碼,進入根目錄,在幫助文檔README中有如何添加單

原创 Linux設備驅動模塊自加載示例與原理解析

本文介紹Linux設備驅動模塊在設備註冊時如何實現自動加載和創建設備節點。 在Linux系統中,基於sysfs文件系統、設備驅動模型和udev工具可以實現在設備模塊“冷、熱”加載時自動加載設備對應的驅動程序,同時可以按需在/dev目

原创 Linux fsync和fdatasync系統調用實現分析(Ext4文件系統)

在Linux系統中,對文件系統上文件的讀寫一般是通過頁緩存(page cache)進行的(DirectIO除外),這樣設計的可以延時磁盤IO的操作,從而可以減少磁盤讀寫的次數,提升IO性能。但是性能和可靠性在一定程度上往往是矛盾的,雖然內

原创 Linux內核調試技術——Fault-injection故障注入

當我們在開發內核功能或者驗證定位問題時,經常需要模擬各種內核的異常場景,來驗證程序的健壯性或加速問題的復現,比如內存分配失敗、磁盤IO錯誤超時等等。Linux內核集成了一個比較實用的功能“Fault-injection”來幫助我們進行故障

原创 深入理解overlayfs(二):使用與原理分析

在初步瞭解overlayfs用途之後,本文將介紹如何使用overlayfs以及理解該文件系統所特有的一些功能特性。由於目前主線內核對overlayfs正在不斷的開發和完善中,因此不同的內核版本改動可能較大,本文儘量與最新的內核版本保持一致

原创 Linux內核調試技術——進程上下文R狀態死鎖監測

前一篇博文介紹了內核監測D狀態死鎖的hung task機制,本文介紹另一種死鎖狀態的監測手段——R狀態死鎖監測。R狀態死鎖指的是某一任務一直處於TASK_RUNNING態且一直佔用着CPU,從而導致其他進程得不到調度而餓死的情況。一般情況

原创 Linux應用程序錯誤使用pthread_mutex_lock互斥鎖觸發SIG_ABRT信號的原因分析

本文分析在Linux應用程序中錯誤使用pthread_mutex鎖時會概率性觸發SIG_ABRT信號而導致程序崩潰(庫打印輸出 :Assertion `mutex->__data.__owner == 0' failed)的原因。 程序環

原创 Linux內核調試技術——jprobe使用與實現

前一篇博文介紹了kprobes的原理與kprobe的使用與實現方式,本文介紹kprobes中的第二種探測技術jprobe,它基於kprobe實現,不能在函數的任意位置插入探測點,只能在函數的入口處探測,一般用於監測函數的入參值。本文首先通

原创 Ext4 Project Quota磁盤配額使用介紹

Disk quota磁盤配額技術是一種限制文件系統空間使用的技術。在Linux系統中,系統管理員可以通過該技術限制其他用戶在指定的容量範圍內使用文件系統,從而防止個別用戶過量使用而影響到其他的用戶,因此早先的磁盤配額技術都是基於user

原创 深入理解overlayfs(一):初識

Overlayfs是一種類似aufs的一種堆疊文件系統,於2014年正式合入Linux-3.18主線內核,目前其功能已經基本穩定(雖然還存在一些特性尚未實現)且被逐漸推廣,特別在容器技術中更是勢頭難擋。本系列博文將首先介紹overlayf

原创 Linux內核調試技術——進程D狀態死鎖檢測

Linux的進程存在多種狀態,如TASK_RUNNING的運行態、EXIT_DEAD的停止態和TASK_INTERRUPTIBLE的接收信號的等待狀態等等(可在include/linux/sched.h中查看)。其中有一種狀態等待爲TAS

原创 樹莓派添加DTS功能

交叉編譯工具鏈:arm-bcm2708-linux-gnueabi- u-boot:u-boot-2015.10(http://www.denx.de/wiki/U-Boot/SourceCode) Linux內核:linux-rpi-4

原创 Linux內核調試技術——kretprobe使用與實現

前兩篇博文介紹了kprobes探測技術中kprobe和jprobe的使用與實現。本文介紹kprobes中的最後一種探測技術kretprobe,它同樣基於kprobe實現,可用於探測函數的返回值以及計算函數執行的耗時。本文首先通過一個簡單的

原创 構建Linux內核驅動demo子系統示例

一般在編寫嵌入式Linux內核驅動時,最簡單的情況下往往只需要寫一個簡單的misc驅動,它僅需要兼容一種硬件外設和一種特定的芯片平臺即可,這種驅動的最大缺點就是可擴展性和可移植性較差,往往在單板硬件上存在小幅的改動就需要更改驅動源代碼,

原创 Generic Netlink內核實現分析(一):初始化

Generic Netlink 是內核專門爲了擴展netlink協議簇而設計的“通用netlink協議簇”。由於netlink協議最多支持32個協議簇,目前Linux4.1的內核中已經使用其中21個,對於用戶需要定製特殊的協議類型略顯不夠