Time of Update: 2018-12-03
如何在keil上偵錯工具,單片機組譯工具的高效率,如何估計程式所用RAM的大小。 將系統移植到單片機上需要考慮的諸多問題,如重入性,堆棧分配,外存使用,中斷操作等。 比如串口操作,當多個任務需要使用串口時,需要各任務互斥使用串口發送資料。各任務可以通過訊號量機制 互斥使用串口發送接收緩衝區。 如果多個任務使用串口,如何區分到來的資料屬於哪個任務呢?可以發送訊號量通知所有的任務,讓任務來判斷。 關於串口操作可以參考:μC/OS—II的嵌入式串口通訊模組設計
Time of Update: 2018-12-03
這兩天,配置了一堆500來個節點的大型叢集,被ipmi的問題困擾了一天半,到下午16:40,終於解決了。這裡來總結一下: 智能平台管理介面(IPMI,Intelligent Platform Management Interface)是管理基於
Time of Update: 2018-12-03
在講進程管理專題最核心的課題——進程建立之前,我們先簡單地回顧一下上一篇博文的sys_clone()系統調用:asmlinkage int sys_clone(struct pt_regs regs){ unsigned long clone_flags; unsigned long newsp; int __user *parent_tidptr, *child_tidptr; clone_flags = regs.ebx; newsp = regs.ecx;
Time of Update: 2018-12-03
sound/core/pcm_native.c
Time of Update: 2018-12-03
CVS,SVN,GitGit使用多個分布式存放庫,基於改變集進行曆史跟蹤。步驟:安裝,建立Git存放庫,向庫中新增內容,操作庫中檔案,合并,其他。GNU/Linux環境編程一書 Gnuplot古老但流行的可視化程式,可與Ruby,Python,Smalltalk綁定。 pause會把進程掛起,直到接收到訊號。返回繼續運行。kill向一個或多個進程發送訊號。raise可以向當前進程發出一個特殊的訊號。alarm函數在預先設定的時間長度到達後發出一個SIGALRM訊號。sigaction是sig
Time of Update: 2018-12-03
我們在中斷專題中提到,Linux的缺頁(Page
Time of Update: 2018-12-03
1 進程切換之前的工作由於每個進程共用CPU寄存器(咱們就當是單CPU吧),因此在恢複一個進程之前,核心必須確保每個寄存器裝入掛起進程時的值,他們就叫“硬體上下文”。在Linux中,進程硬體上下文得一部分放在TSS段,主要用於對核心態堆棧進行定址,而剩餘部分放在核心態堆棧中。我們再回憶一下硬體中TSS段的內容:struct tss_struct { unsigned short back_link,__blh; unsigned long esp0;
Time of Update: 2018-12-03
以音效卡驅動的資料結構為切入點分析:/* SoC card */struct snd_soc_card { const char *name; struct device *dev; struct snd_card *snd_card; //在snd_soc_instantiate_card中利用snd_card_create建立音效卡 struct module *owner; struct list_head list; struct mutex
Time of Update: 2018-12-03
#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>static int hello_init(void){ printk("....\n"); return 0;}static void hello_exit(){
Time of Update: 2018-12-03
Normal07.8 磅02falsefalsefalseMicrosoftInternetExplorer4下面是一個Windows Mobile6上的一個線程的實現體。我要提醒一下1. WinCE kernel是multi-task環境2. 這個線程的實現看起來沒什麼特別結論這樣一個thread直接會導致這個mobile系統無法正常使用,power button失效,keypad無法使用。再次引導你誤判WinCE
Time of Update: 2018-12-03
Control介面主要讓使用者空間的應用程式(alsa-lib)可以訪問和控制音頻codec晶片中的多路開關,滑動控制項等。我們需要在我們的驅動程式初始化時主動調用snd_pcm_new()函數建立pcm裝置,而control裝置則在snd_card_create()內被建立,snd_card_create()通過調用snd_ctl_create()函數建立control裝置節點。所以我們無需顯式地建立control裝置,只要建立音效卡,control裝置被自動地建立。同樣,它有一個snd_ct
Time of Update: 2018-12-03
H.323協議存在一些問題(不支援群播,只有有限的MCU;其IP電話網路在接入端仍需經過當地PSTN電路交換網),之後定製了MGCP,目的在於將H.323在功能上進行分解,劃分成負責ApsaraVideo for Media Processing的媒體網關(MG),掌控呼叫建立與控制的媒體網關控制器(MGC)兩部分。VoIP架構4元素:媒體網關,媒體網關控制器,Voice Messaging Service器,訊號網關器(在交換過程中進行相關控制,以決定通話建立與否,及相關增值服務,負責將ss7
Time of Update: 2018-12-03
第一代Unix系統實現了一種傻瓜式的進程建立:當發出fork()系統調用時,核心原樣複製父進程的整個地址空間並把複製的那一份分配給子進程。這種行為是非常耗時的,因為它需要:- 為子進程的頁表分配頁框- 為子進程的頁分配頁框- 初始化子進程的頁表- 把父進程的頁複製到子進程相應的頁中 這種建立地址空間的方法涉及許多記憶體訪問,消耗許多CPU周期,並且完全破壞了快取中的內容。在大多數情況下,這樣做常常是毫無意義的,因為許多子進程通過裝入一個新的程式開始它們的執行,這樣就完全丟棄了所繼承的地址空間。
Time of Update: 2018-12-03
講了這麼多了,很多人肯定會一頭霧水,前邊提到的都是些資料結構或者是些概念性的東西,真正對動態網頁面的管理機制在哪裡?換句話說,如何將每個節點,每個區中的頁框分配給進程?要理清這個思路,我們首先必須學習一種演算法 —— 夥伴系統演算法。 核心要分配一組連續的頁框,必須建立一種健壯、高效的分配策略。為此,必須解決著名的外部片段(external
Time of Update: 2018-12-03
來自精通Linux裝置驅動程式開發:平台裝置驅動中的平台可看做一種偽匯流排,通常用於將整合進片上系統的輕量級裝置和Linux裝置模型串連在一起。平台由平台裝置和平台裝置驅動程式組成。(來自:http://blog.tianya.cn/blogger/post_show.asp?BlogID=862226&PostID=21247170)裝置驅動中,平台裝置作為一個虛擬裝置和匯流排可以大大簡化設計難度。核心在初始化過程中,首先初始化虛擬匯流排,其次將裝置添加到虛擬匯流排上,最後註冊裝
Time of Update: 2018-12-03
演算法的入門級研究一般都是從“排序”和“尋找”開始的。“排序演算法”和她的姊妹“尋找演算法”是很多複雜演算法的基礎,也是很多複雜系統的基礎。比如Linux中最複雜的虛擬記憶體管理就是基於“紅-黑樹”尋找演算法的;Solaris是基於AVL樹尋找演算法;MySQL是基於B樹尋找演算法;P2P技術是基於DHT雜湊演算法……(待補充。。。)今天推出的中級程式員必須懂的20大基礎演算法專題,通過介紹各種基本排序和尋找演算法,梳理一下電腦演算法的基礎,為後面介紹那些複雜演算法做鋪墊。這裡首先從各種排序演算
Time of Update: 2018-12-03
從下到上,依次是ALSA driver、ALSA lib、ALSA application:ALSA application包括aplay、arecord,他們屬於ALSA utils的工具。這些工具用於測試驅動非常的好。ALSA lib提供諸如開啟,關閉,播放的函數庫。ALSA driver是後來才加入了對SOC的支援,並且將hardware audio
Time of Update: 2018-12-03
1
Time of Update: 2018-12-03
輸入:apt-cache search linux-source //查看核心版本輸入:apt-get install linux-source-3.0.0 //擷取對應版本的核心,預設安裝在/usr/src目錄下見:Ubuntu下構建核心源碼樹的方法 ubuntu下編譯本機模組是否需要下載核心源碼呢?答案是可以的。dmesg | tail -1
Time of Update: 2018-12-03
fork()與vfock()都是建立一個進程,那他們有什麼區別呢?總結有以下三點區別:1. fork():子進程拷貝父進程的資料區段,程式碼片段 vfork():子進程與父進程共用資料區段2. fork():父子進程的執行次序不確定 vfork保證子進程先運行,在調用exec或exit之前與父進程資料是共用的,在它調用exec或exit之後父進程才可能被調度運行。3. vfork