Time of Update: 2018-12-05
前一陣子在公司移植Linux2.6到一塊ARM11的開發板上,下面粗略講講移植Linux的一般過程。 一開始的UBOOT的移植不多說了。UBOOT最後有兩種方式進入Linux,一種是使用uImage,可以在引導時附加命令列參數,但操作起來比較麻煩。另一種較簡單的是使用tftp將Linux核心載入到0x80008000(預設起始地址)的地方,然後使用go命令直接跳轉。我使用的是第二種方式,其缺點是調整命令列參數的時候需要修改.config檔案,然後強制重新編譯setup.c(可以通過刪除setup
Time of Update: 2018-12-05
文章目錄 2.1 各層間關鍵資料介面 1. 無線網路驅動(ath9k_htc) ath9k_htc是一個基於USB介面的SoftMAC無線網路適配器。為了其驅動能正常工作,首先必須調用usb_register來註冊驅動定義的usb_driver,以藉助USB Core的力量來處理與USB協議相關的事件。其代碼如下:static struct usb_driver ath9k_hif_usb_driver = {.name =
Time of Update: 2018-12-05
1. cfg80211_init • cfg80211_wq工作隊列主要處理以下工作: 1) 清除:wireless_dev.cleanup_work 2) 掃描:cfg80211_registered_device.scan_done_wk 3) 事件:cfg80211_registered_device.event_work • 註冊netlink,其名為:"nl80211",其操作為:nl80211_ops
Time of Update: 2018-12-05
本文介紹藍芽協議棧Bluez在linux中實現HID功能的kernel部分。在linux kernel中,Bluez對HID的實現代碼在/net/bluetooth/hidp檔案夾中,主要包括sock.c,core.c和hidp.h三個檔案。Bluez提供了一個socket介面,使用者空間程式通過使用該socket控制HID。該socket使用的協議編號為BTPROTO_HIDP。1. 初始化HIDP的初始化在sock.c的hidp_init_sockets函數。int __init
Time of Update: 2018-12-05
本文介紹Linux2.6.29中,配置高精度模式的hrtimer與未配置高精度模式時行為的區別。本文暫不考慮高精度模式對Linux系統時鐘中斷的影響。 在沒有配置高精度模式時,hrtimer的逾時在系統時鐘中斷的輪循中檢查,所以此時hrtimer的定時精度還是以輪循的間隔為單位,精度與傳統的時間輪定時器一樣。在配置高精度模式後,hrtimer的逾時由struct
Time of Update: 2018-12-05
1. 基本概念 • cfg80211: 用於對無線裝置進行組態管理。與FullMAC, mac80211和nl80211一起工作。(Kernel態) • mac80211: 是一個driver開發人員可用於為SoftMAC無線裝置寫驅動的架構 (Kernel態)。 • nl80211: 用於對無線裝置進行組態管理,它是一個基本Netlink的使用者態協議(User態) • WNIC : Wireless Network Interface Controller,
Time of Update: 2018-12-05
很久以前整理的,今天偶然看到了,放到網上方便查詢。一、 syslogd和klogdsyslogd與syslog配套使用,主要用於daemon輸出log。Klogd讀/proc/kmsg,儲存的是kernel log。Klogd啟動時有一個-f選項,用於指定儲存kernel log的檔案。如果沒有指定,會發送到syslog,由syslog統一儲存。二、 daemon函數調用daemon函數可用於將程式轉入後台,並斷開與終端的標準輸入輸出串連。daemon(0, 0); //
Time of Update: 2018-12-05
☆★省電or流暢★ ☆root@android:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_available_governorshotplug conservative ondemand userspace powersave interactive performance為了可以對幾種常見的CPU頻率調節模式有個基本的理解,下面簡單的總結了一下,根據不同方式的特點,自己來在效能與省電這兩對矛盾之間做個取捨,找出適合自己的平衡點吧!1、
Time of Update: 2018-12-05
1. drop_caches在Documentation/sysctl/vm.txt中有如下描述:drop_cachesWriting to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.To free pagecache: echo 1 > /proc/sys/vm/drop_cachesTo
Time of Update: 2018-12-05
轉自:http://blog.csdn.net/walkingman321/article/details/6151172本文介紹Linux2.6.29中,配置高精度模式的hrtimer與未配置高精度模式時行為的區別。本文暫不考慮高精度模式對Linux系統時鐘中斷的影響。 在沒有配置高精度模式時,hrtimer的逾時在系統時鐘中斷的輪循中檢查,所以此時hrtimer的定時精度(jiffy)還是以輪循的間隔為單位,精度與傳統的時間輪定時器一樣。
Time of Update: 2018-12-05
1. bdi是什麼? bdi,即是backing device info的縮寫,顧名思義它描述備用存放裝置相關描述資訊,這在核心代碼裡用一個結構體backing_dev_info來表示。 bdi,備用存放裝置,簡單點說就是能夠用來儲存資料的裝置,而這些裝置儲存的資料能夠保證在電腦電源關閉時也不丟失。這樣說來,磁碟片存放裝置、光碟機存放裝置、USB存放裝置、硬碟存放裝置都是所謂的備用存放裝置(後面都用bdi來指示),而記憶體顯然不是2.
Time of Update: 2018-12-05
1. Linux hrtimer的實現方案 Linux hrtimer的實現是依賴硬體(通過可程式化定時器來實現)的支援的,而且此定時器有自己的專用寄存器, 硬中斷和頻率。比如我的板子上的對應參數如下: Timer at Vir:0xE0100200 = Phy:0xE0100200, using Irq:27, at Freq:250000000,由此可見,其頻率為250MHz,所以其精度為:1/250000000=4ns,比系統時鐘jiffy(HZ=100,精度為10ms)
Time of Update: 2018-12-05
1.
Time of Update: 2018-12-05
1. 註冊非強制中斷當然是通過open_softirq例子如下:void __init init_timers(void){int err = timer_cpu_notify(&timers_nb, (unsigned long)CPU_UP_PREPARE,(void *)(long)smp_processor_id());init_timer_stats();BUG_ON(err ==
Time of Update: 2018-12-05
記憶體檔案系統(linux,FreeBSD)在Linux中可以將一部分記憶體當作分區來使用,我們稱之為RamDisk。對於一些經常被訪問的檔案,而它們又不會被更改,可以將它們通過RamDisk放在記憶體中,即可明顯地提高系統的效能。當然你的記憶體可要足夠大了。RamDisk有兩種,一種可以格式化,載入,在Linux核心2.0/2.2就已經支援,其不足之處是大小固定。另一種是核心2.4才支援的,通過Ramfs或者tmpfs來實現,它們不能被格式化,但是用起來靈活,其大小隨所需要的空間而增加或減少
Time of Update: 2018-12-05
Linux 系統中共使用了四種堆棧:1) 系統初始化時臨時使用的堆棧;2) 供核心程式自己使用的堆棧(核心堆棧),只有一個,位於系統地址空間固定的位置,也是後來任務0的使用者態堆棧;3) 每個任務通過系統調用,執行核心程式時使用的堆棧,我們稱之為任務的核心態堆棧,每個任務都有自己獨立的核心態堆棧;4)
Time of Update: 2018-12-05
每一個檔案,都可以通過一個struct stat的結構體來獲得檔案資訊,其中一個成員st_nlink代表檔案的連結數。struct stat {unsigned longst_dev;/* Device. */unsigned longst_ino;/* File serial number. */unsigned intst_mode;/* File mode. */unsigned intst_nlink;/* Link count. */unsigned intst_
Time of Update: 2018-12-05
文章目錄 2.1 Page Directory (PGD and PMD) 2.2 Page Table Entry2.3 如何通過3級頁表訪問實體記憶體 1. Linux實體記憶體三級架構 對於記憶體管理,Linux採用了與具體體系架構不相關的設計模型,實現了良好的延展性。它主要由記憶體節點node、記憶體地區zone和物理頁框page三級架構組成。 • 記憶體節點node
Time of Update: 2018-12-05
1. 函數說明pipe(建立管道):1) 標頭檔 #include<unistd.h>2) 定義函數: int pipe(int filedes[2]);3) 函數說明: pipe()會建立管道,並將檔案描述詞由參數filedes數組返回。 filedes[0]為管道裡的讀取端 filedes[1]則為管道的寫入端。4) 傳回值: 若成功則返回零,否則返回-1,錯誤原因存於errno中。 錯誤碼:
Time of Update: 2018-12-05
去年開始,抱著學習的態度開始了我的Linux學習,到現在,差不多一年了,收穫很多,不敢說精通Linux,但是,還是對得起“略懂”這兩個字的。這一年裡我看了很多書,細細數下,大概15本左右,其中包含了兩個方面,一個是Android,另一個就是Linux。當然,在學習之初,遇到了不少瓶頸,在這裡,還要感謝師兄師姐的指導。寫這篇文章的目的有兩個:1.分享自己的學習經驗2.記錄下我的學習曆程既然談到了學習,那一定需要從看書說起,下面我就羅列下我看過的關於Linux學習的書1.《鳥哥的Linux私房菜-基