目前分類:Linux Kernel & driver (28)

瀏覽方式: 標題列表 簡短摘要

常常要 trace reference device 的人,應該會需要找各 device 的 kernel source code,這篇文章主要整理的這份清單,以 Android 各版本的 leading device 為主,加上各版本 Google 所使用平台的 dev. board的資訊。

其實 Google 開發中的平台可以從 Android 的 gitweb 和 review board 看出一些端倪,包括 CPU、code name、採用的 kernel function ... etc.

以下是曾經個人追過的 device,括號內為Google 或 SoC 廠開發時使用的 code name (2.0之前,目前回去看也沒啥意義,就不列了 :P):

 

2.1~2.3 (QSD8x50、Samsung S5P110)

huenlil 發表在 痞客邦 PIXNET 留言(1) 人氣()

在 Linux kernel 2.6 之後,Linux 已經採用 udev 來管理各種 device 的新增、移除,但是在 Android 中,Google 並未使用 udev 的機制,而是採用 vold 來取代 udev的工作。

Vold 的trace 可以參考下面文章的分析,trace 跟原理都寫得很詳細。

http://blog.csdn.net/datangsoc/article/details/5928132

PS: 最早的 Android 並沒有 vold,而是更單純的 mountd

 

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

非常有趣也很有用的 Linux kernel 互動架構圖 XD

點進去可能會被複雜度嚇到就是了 :P

http://www.makelinux.net/kernel_map

 

覺得太複雜的,可以先從新手版看起 XD

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

GPIO(General Purpose I/O) 對嵌入式系統的開發者應該是很熟悉的東西,之前有轉錄一篇 傳統 gpio 的控制方法

但這是立基於SoC provider 的所提供的 API,並不具備一個標準的介面。而且在嵌入式系統大力發展下,越來越多的

SoC 推出,加上SoC要連接越來越多的周邊,會使用FPGA或是 I/O expander 來擴充 GPIO 數量。因此除了SoC

本身的介面之外,開發者還必須藉由另外一套或更多的介面來使用 GPIO,這種沒有共通標準的東西勢必會造成開發上的

一些困擾,所以這幾年 linux 發展出一套新的 gpiolib 來解決這問題。作者 David Brownell 的patch 是這樣敘述的:

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

最近遇到一個奇怪的問題是 kernel 在 load ramdisk 時出問題,而且還不是100%發生 ...

主要問題牽扯到 2.6 引進的 initramfs 處理 ramdisk 的流程,還要先了解 bootloader 的

一些背景知識。找了些相關資訊,順便做做筆記:

initramfs 相關的 src path:

- init/initramfs.c

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

要用的時候,老是忘記路徑還要花時間找,乾脆記錄在這 Orz

kernel/include/asm-generic/errno-base.h
kernel/include/asm-generic/errno.h

 


huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

來源:

淺談 USB 通訊架構之定義(一)

淺談 USB 通訊架構之定義(二)

 

Ref.:

USB org: http://www.usb.org/ 

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

來源: http://blog.chinaunix.net/u1/51562/showart_1736813.html
Kernel doc.: http://www.mjmwired.net/kernel/Documentation/cgroups.txt


------------------------------------------

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

來源: http://blog.yesican.tw/?p=912
幾天突然發現記憶體完全被吃光,連swap也一樣,硬碟也發出存取的聲音,查出原因是rtorrent非常耗記憶體,雖然抓檔速度超快,但是關掉後也沒將記憶體釋放,對整個系統還是有那麼一點影響,所以還是先採取手動釋放記憶體,經過釋放記憶體後,整個系統感覺也較順了。


image

我使用的coLinux的核心版本為2.6.22.18,而Linux 在Kernels 2.6.16以後的版本對vm做了很大的調整,可透過/proc/sys/vm/drop_caches這個檔案來釋放記憶體。

huenlil 發表在 痞客邦 PIXNET 留言(1) 人氣()

來源: http://www.itqun.net/content-detail/194643_2.html

do_initcalls 的原理 

前言

   macro 定義__define_initcall(level,fn)對於內核的初始化很重要,它指示編譯器在編譯的時候,將一系列初始化函數的起始地址值按照一定的順序
   放在一個section中。在內核初始化階段,do_initcalls() 將按順序從該section中以函數指針的形式取出這些函數的起始地址,來依次完成相應

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

來源: http://blog.csdn.net/eroswang/archive/2008/04/23/2317771.aspx

在kernel中有很多__init,這個東東到底是何方神聖捏?且聽小生我一一道來。
下面是其定義:
file:/include/linux/init.h
 43 #define __init      __attribute__ ((__section__ (".init.text"))) __cold

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

來源:http://loda.hala01.com/2009/04/linux上的核心訊息紀錄機制解析/

Linux上的核心訊息紀錄機制解析

一,前言

 

                     在linux的環境裡,系統訊息紀錄機制一直都是系統核心程式開發人員相當重要的參考資訊,瞭解核心訊息傳遞的機制也就成為要在Linux撰寫核心程式碼時,所需要去面對的課題,透過這篇文章筆者將為各位介紹Linux核心的訊息傳遞函式,並介紹一些簡單的方法,讓程式開發者可以更容易的控制核心訊息的導出.

 

                     這次的文章主要會使用到兩個Linux上的套件,分別為sysklogd-1.4.1.tar.gz與util-linux-2.11r.tar.gz,各位可以根據自己的需求下載不同的套件版本.

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

來源: http://sites.google.com/site/rgbbones2/yaffs

1 Yaffs文件系統結構

1.1 簡介

1.1.1 應用場合

        Yaffs(Yet Another Flash File System)文件系統是專門針對NAND閃存設計的嵌入式文件系統,目前有YAFFS和YAFFS2兩個版本,兩個版本的主要區別之一在於YAFFS2能夠更好的支持大容量的NAND FLASH芯片。
Yaffs文件系統有些類似於JFFS/JFFS2文件系統,與之不同的是JFFS1/2文件系統最初是針對NOR FLASH的應用場合設計的,而NOR FLASH和NAND FLASH本質上有較大的區別,所以儘管JFFS1/2 文件系統也能應用於NAND FLASH,但由於它在內存佔用和啟動時間方面針對NOR的特性做了一些取捨,所以對NAND來說通常並不是最優的方案。

1.1.2 NOR和NAND的比較

        基本上NOR比較適合存儲程序代碼,其容量一般較小(比如小於32MB),價格較高,而NAND容量可達1GB以上,價格也相對便宜,適合存儲數據。一般來說,128MB以下容量NAND FLASH 芯片的一頁大小為528字節,用來存放數據,另外每一頁還有16字節的備用空間(SpareData,OOB),用來存儲ECC校驗/壞塊標誌等信息,再由若干頁組成一個塊,通常一塊為32頁16K。

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

man-page

可直接使用 man 指令去查 api/sys call,在ubuntu 下可先安裝下列兩個pkg:

$ sudo apt-get install manpages-dev

$ sudo apt-get install glibc-doc

 

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

來源: http://www.linuxuser.com.tw/skill_detail.php?cid=1399

利用capability特徵加強Linux系統安全


摘要

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

來源: C語言內核等待隊列機制介紹

 

相信很多寫程序的人都寫過 socket 的程序。當我們 open 一個 socket 之後,接著去讀取這個 socket,如果此時沒有任何資料可供讀取,那 read 就會 block 住。(這是沒有加上 O_NONBLOCK 的情形),直到有資料可讀取才會傳回來。在 Linux kernel 裡有一個數據結構可以幫助我們做到這樣的功能。這個數據結構就是這裡要跟各位介紹的 wait queue。在 kernel 裡,wait_queue 的應用很廣,舉凡 device driver semaphore 等方面都會使用到 wait_queue 來 implement。所以,它算是 kernel 裡蠻基本的一個數據結構

接下來,我要跟各位介紹一下 wait_queue 的用法,以及用一個例子來說明如何使用 wait_queue。最後,我會帶各位去 trace 一下 wait_queue 的原始程序代碼,看看 wait_queue 是如何做到的。

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

來源:

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

Linux/Unix 區別於微軟平台最大的優點就是真正的多用戶,多任務。因此在任務管理上也有別具特色的管理思想。我們知道,在 Windows 上面,我們要麼讓一個程序作為服務在後台一直運行,要麼停止這個服務。而不能讓程序在前台後台之間切換。而 Linux 提供了 fg 和 bg 命令,讓你輕鬆調度正在運行的任務。

假設你發現前台運行的一個程序需要很長的時間,但是需要干其他的事情,你就可以用 Ctrl-Z ,終止這個程序,然後可以看到系統提示:
[1]+ Stopped /root/bin/rsync.sh
然後我們可以把程序調度到後台執行:(bg 後面的數字為作業號)

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()

來源:ARM9, Linux-2.6.10 BSP之gpio.c淺析

 

針對該gpio.c的硬體手冊是SPRUE25.pdf,可到TI的網站(www.ti.com)上下載,或直接在谷歌裡搜索。
以下是兩個文件gpio.c和gpio.h的淺析。

huenlil 發表在 痞客邦 PIXNET 留言(2) 人氣()

來源: Spinlock 簡介

 Spinlock 簡介

 

作者 : cjc86

在這篇文章中,我將會介紹 Kernel 提供用來使用 spinlock 的 function。除此之外,我還會告訴各位,為何在 SMP 的環境裡,使用 spinlock 會比將所有 CPU 的中斷 disable 這個方法來的有效率,我也會告訴各位如何針對不同的使用需求,使 spinlock 的 cost 再降低,進而使系統的效能更好...

huenlil 發表在 痞客邦 PIXNET 留言(1) 人氣()

1 2