Time of Update: 2018-12-03
使用線程編寫程式需要技巧,而多線程的程式中的bug非常難以跟蹤、調試,因為這些bug經常是難以再現的。競爭條件:當一個線程訪問一個資料結構的時候,另一個線程也訪問同一個資料結構,這時就出現了競爭條件——兩個線程(也可能是多個)競爭對同一個資源的訪問。當其中一個線程處理到一部分的時候,另外的線程可能進入了對同一資料的處理,而且出於調度的原因,它啟動並執行比前一個更快;這時,同樣的處理可能就出現了多次。例如,一個代表工作清單的單向鏈表(隊列),一個線程從當前元素中讀出了下一個任務,並發現下一個任務
Time of Update: 2018-12-03
出處:http://blog.csdn.net/coolraining/article/details/6678759新版linux系統裝置架構中關於電源管理方式的變更based on linux-2.6.32 一、裝置模型各資料結構中電源管理的部分 linux的裝置模型通過諸多結構體來聯合描述,如struct device,struct device_type,struct class,struct device_driver,struct
Time of Update: 2018-12-03
圖解ARM Linux的啟動全過程圖解ARM-Linux的啟動全過程:核心自解壓階段—>核心引導階段—>核心初始化階段—>BusyBox初始化階段。圖片有點大,開啟的時候比較慢。大家可以免費下載http://download.csdn.net/detail/ce123/4275871。注意:本圖在不斷的修改中,本網頁中的圖是最新的。下載連結中的圖不能替換,可能有些錯誤!
Time of Update: 2018-12-03
SAMBA不僅能供WINDOWS和LINUX之間的通訊,也能供LINUX與LINUX之間的通訊 下面是UBUNTU10.4 通過SAMBA訪問一LINUX伺服器的方法:(前提是該LINUX伺服器已搭建好SAMBA) 在你的UBUNTU終端裡輸入: sudo apt-get install smbfssudo mount.smbfs //12.23.111.83(要訪問的伺服器位址)/mydir(該伺服器下你的檔案夾目錄) /mylocal(本地檔案夾,你要將samba伺服器掛載到此檔案夾) -
Time of Update: 2018-12-03
源出處:http://www.startos.com/linux/tips/2011011921499.html1 休眠與同步 一個驅動當它無法立刻滿足請求應當如何響應? 一個對 read 的調用可能當沒有資料時到來, 而以後會期待更多的資料。或者一個進程可能試圖寫, 但是你的裝置沒有準備好接受資料, 因為你的輸出緩衝滿了。調用進程往往不關心這種問題; 程式員只希望調用 read 或 write 並且使調用返回, 在必要的工作已完成後. 這樣, 在這樣的情形中。驅動應當(預設地)阻塞進程,
Time of Update: 2018-12-03
源出處:http://www.startos.com/linux/tips/2011011921499_2.html全域或者在棧中定義一個wait_queue_t類型變數的同時對其初始化,這保證了系統的可靠性,避免因使用者忘記初始化時導致的問題。通用的初始化宏,tsk為任意指標。分兩步: 1) 內部宏__WAITQUEUE_INITIALIZER初始化相應成員;當wq內嵌在別的結構體中時,此宏很重要,提高了可移植性; 2)
Time of Update: 2018-12-03
此內容位於標頭檔: include/asm-generic/errno.h#ifndef _ASM_GENERIC_ERRNO_H#define _ASM_GENERIC_ERRNO_H#include <asm-generic/errno-base.h>#define EDEADLK 35 /* Resource deadlock would occur */#define ENAMETOOLONG 36 /* File name too
Time of Update: 2018-12-03
源出處: http://www.startos.com/linux/tips/2011011921499_6.html4.2 wake_up 的實現細節 \kernel \sched.c /* * The core wakeup function. Non-exclusive wakeups (nr_exclusive == 0) just * wake everything up. If it's an exclusive wakeup (nr_exclusive == small +
Time of Update: 2018-12-03
在 Linux/UNIX 世界中,一切都被看作檔案,包括系統管理命令。單獨對於組織而言,我們在本系列的第一部分中討論了檔案命令,並將在本文中提供最有用的系統診斷和維護命令。 對於檔案命令,我們在此處詳盡討論了某些相當簡單和直觀的管理命令。而只描述了其他較複雜命令的功能,以便在您需要使用時,知道存在這些命令及其用途。本文不涉及對每個命令使用背後的基本原理的詳細討論,但是我們將討論最基本和最有用的命令,這些命令用於監視和管理印表機服務、檔案系統、磁碟和進程。 有關超級使用者的更多資訊
Time of Update: 2018-12-03
源出處:http://www.startos.com/linux/tips/2011011921499_7.html5.3 手工休眠的具體函數執行流 特殊睡眠要求程式員手動處理所有上面的步驟. 它是一個繁瑣的過程, 包含相當多的易出錯的樣板式的代碼. 程式員如果願意還是可能用那種方式手動睡眠。 (1)建立和初始化一個等待隊列。常由宏定義完成: DEFINE_WAIT(my_wait); /*name 是等待隊列入口項的名字. 也可以用2步來做:*/ wait_queue_t my_wait;
Time of Update: 2018-12-03
linux下查看硬體資訊用dmidecode命令查看會比較多些一、在Linux 系統中,對硬體判別的標識的依據; 在 LinuxSir.Org 討論區,我們經常看到有些弟兄這樣來描述自己的硬體“我的顯示卡是XXX牌子的,Linux
Time of Update: 2018-12-03
源出處:http://www.startos.com/linux/tips/2011011921499_5.html/** * wait_event_interruptible - sleep until a condition gets true * @wq: the waitqueue to wait on * @condition: a C expression for the event to wait for * * The process is put to sleep (
Time of Update: 2018-12-03
<linux/fb.h> 與framebuffer相關的宏定義如FB_EVENT_BLANK, extern一些常用的函數如fb_blank(), 結構體定義如 struct fb_fix_screeninfo,fb_var_screeninfo<linux/ctype.h> 定義了一些用於判斷某一個字元是否為大寫字母、小寫字母、數字、控制字元、標點符號等宏,如,isdigit(c)判定參數c是否為數字,此外還有大小寫轉換宏,如tolower(c), toupper(c)
Time of Update: 2018-12-03
最近有不少客戶就嵌入式系統開發入門方面提出了一些問題,我們感覺很有代表性,所以英創工程師把這些問題進行了匯總解答,希望能對想做嵌入式開發的工程師有一點協助。 1. 進行嵌入式開發必須弄懂ARM彙編指令集嗎? 書店裡有很多入門級的書,第一章不是介紹ARM指令集,就是介紹ARM的CPU資源,這給很多初學者一個很不好的直觀感覺,就是學習ARM一定要把組合語言和CPU資源搞明白。然而,這兩個方面,沒有實際的去做一下,只是紙上談兵,怎麼又搞得明白呢,於是,讓很多初學者,知難而退。
Time of Update: 2018-12-03
在平台標頭檔通常有#ifdef CONFIG_ENABLE_MMU#define virt_to_phys(x) virt_to_phy_smdkc110(x)#else#define virt_to_phys(x) (x)#endif 這裡居然是虛擬位址轉換成物理地址,沒有物理地址轉換成虛擬位址的東西?在do_movi 函數裡面有 if (addr >= 0xc0000000) addr = virt_to_phys(addr);在do_bootm函數也有 addr = virt_
Time of Update: 2018-12-03
一、安裝VMware Tools: 1、進入vmware下的linux系統; 2、在vmware功能表列中通過 [VM]->[ Install WMware Tools] 菜單來安裝VMware Tools; 3、雙擊linux系統案頭上的VMware Tools; 4、雙擊安裝VMwareTools-6.0.3-80004.i386.rpm。二、設定解析度: 1、su進入超級使用者並輸入密碼; 2、cd
Time of Update: 2018-12-03
在支援MMU的32位處理器平台上,Linux系統中的實體儲存體空間和虛擬儲存空間的位址範圍分別都是從0x00000000到0xFFFFFFFF,共4GB,但實體儲存體空間與虛擬儲存空間布局完全不同。Linux運行在虛擬儲存空間,並負責把系統中實際存在的遠小於4GB的實體記憶體根據不同需求映射到整個4GB的虛擬儲存空間中。n實體儲存體空間布局Linux的實體儲存體空間布局與處理器相關,詳細情況可以從處理器使用者手冊的儲存空間分布表(memory
Time of Update: 2018-12-03
Linux記憶體線性地址空間大小為4GB,分為2個部分:使用者空間部分(通常是3G)和核心空間部分(通常是1G)。在此我們主要關注核心地址空間部分。 核心通過核心頁全域目錄來管理所有的實體記憶體,由於線形地址前3G空間為使用者使用,核心頁全域目錄前768項(剛好3G)除0、1兩項外全部為0,後256項(1G)用來管理所有的實體記憶體。核心頁全域目錄在編譯時間靜態地定義為swapper_pg_dir數組,該數組從實體記憶體地址0x101000處開始存放。由圖可見,(1)
Time of Update: 2018-12-03
ARM平台linux核心Notes 2linux記憶體管理的任務 1)組織規劃整個系統的物理和虛擬儲存空間分布; 2)為虛擬儲存空間(線性地址空間)建立頁表,即建立虛擬位址到物理地址的映射關係; 3)設定不同存數空間的存取控制屬性,保護系統儲存空間不被非法訪問; 4)記憶體配置和釋放。 1
Time of Update: 2018-12-03
在某些特殊情況下,伺服器可能要安裝雙系統一個linux系統,一個windows系統這種情況下,安裝順序是,先裝Windows系統,後裝Linux這是因為,Linux的引導程式grub具備多系統選擇能力而Windows預設的引導程式是不具備選擇多系統能力的比如伺服器已經安裝了雙系統,啟動菜單為Linux的grub要刪除linux系統,則用Windows啟動光碟片或者DOS啟動盤引導然後在命令列下執行:fdisk