Time of Update: 2018-12-06
進入《Linux裝置驅動程式(第3版)》第四章調試技術的學習。一、核心中的調試支援在前面已經建議過:學習編寫驅動程式要構建安裝自己的核心(標準主線核心)。最重要的原因之一是:核心開發人員已經建立了多項用於調試的功能。但是由於這些功能會造成額外的輸出,並導致能下降,因此發行版廠商通常會禁止發行版核心中的調試功能。 為了實現核心調試,我在核心配置上增加了幾項: Kernel hacking ---> [*] Magic SysRq key
Time of Update: 2018-12-06
以《LDD3》的說法:Linux裝置模型這部分內容可以認為是進階教材,對於多數程式作者來說是不必要的。但是我個人認為:對於一個嵌入式Linux的底層程式員來說,這部分內容是很重要的。以我學習的ARM9為例,有很多匯流排(如SPI、IIC、IIS等等)在Linux下已經被編寫成了子系統,無需自己寫驅動;而這些匯流排又不像PCI、USB等在《LDD3》上有教程,有時還要自己研究它的子系統構架,甚至要自己添加一個新的匯流排類型。對於這方面的學習,我推薦幾個網頁,這些也是我這部分文章的參考資料:(1)《
Time of Update: 2018-12-06
今天進入《Linux裝置驅動程式(第3版)》第五章並發和競態的學習。對並發的管理是作業系統編程中核心的問題之一。
Time of Update: 2018-12-06
參考資料:《Linux核心中的迴圈緩衝區》作者:西郵 王聰 嚴重感謝文章作者! 但是(可能是源碼版本問題)有些結論並不正確: “而kfifo_init只會接受一個已指派好空間的fifo->buffer,不能和kfifo_free搭配,用kfifo_init分配的kfifo只能用kfree釋放。” 閱讀源碼可以得出這樣的結論:kfifo_init和kfifo_alloc分配的kfifo都能用kfree釋放。已經用實驗證實。原文連結地址:
Time of Update: 2018-12-06
一、Linux的幀緩衝裝置 幀緩衝(framebuffer)是 Linux 為顯示裝置提供的一個介面,把顯存抽象後的一種裝置,他允許上層應用程式在圖形模式下直接對顯示緩衝區進行讀寫操作。這種操作是抽象的,統一的。使用者不必關心物理顯存的位置、換頁機制等等具體細節。這些都是由Framebuffer 裝置驅動來完成的。幀緩衝驅動的應用廣泛,在 linux 的案頭系統中,Xwindow 伺服器就是利用幀緩衝進行視窗的繪製。尤其是通過幀緩衝可顯示漢字點陣,成為
Time of Update: 2018-12-06
熱插拔 有 2 個不同角度來看待熱插拔: 從核心角度看,熱插拔是在硬體、核心和核心驅動之間的互動。 從使用者角度看,熱插拔是核心和使用者空間之間,通過調用使用者空間程式(如hotplug、udev 和 mdev)的互動。 當需要通知使用者核心發生了某種熱插拔事件時,核心才調用這個使用者空間程式。 現在的電腦系統,要求 Linux
Time of Update: 2018-12-06
今天進入《Linux裝置驅動程式(第3版)》第六章進階字元驅動程式操作的學習。 一、ioctl 大部分裝置除了讀寫能力,還可進行超出簡單的資料轉送之外的操作,所以裝置驅動也必須具備進行各種硬體控制操作的能力. 這些操作常常通過 ioctl 方法來支援,它有和使用者空間版本不同的原型:int (*ioctl) (struct inode *inode, struct file *filp,unsigned int cmd, unsigned long
Time of Update: 2018-12-06
從此文檔開始,核心使用2.6.29.4 很久沒有寫《LDD3》的學習筆記了,趁著做項目的機會,學習一下USB的驅動程式,並寫學習筆記。 。 如果剛開始接觸USB,會感覺無從下手,這種感覺就像我第一次接觸嵌入式Linux一樣。所以要對USB的硬體原理、資料轉送和在USB電纜上傳輸的資料格式有一定的瞭解。所以推薦一篇《實用USB術語詳解》。再去CEPARK ( China Electronics Park )
Time of Update: 2018-12-06
《Linux裝置驅動程式(第3版)》第三章字元裝置驅動程式的學習。 這一章主要通過介紹字元裝置scull(Simple Character Utility for Loading Localities,地區裝載的簡單字元工具)的驅動程式編寫,來學習Linux裝置驅動的基本知識。scull可以為真正的裝置驅動程式提供樣板。一、主裝置號和次裝置號 主裝置號表示裝置對應的驅動程式;次裝置號由核心使用,用於正確確定裝置檔案所指的裝置。 核心用dev_t類型(<linux/types.h&
Time of Update: 2018-12-06
核心使用2.6.29.4 USB裝置其實很複雜,但是Linux核心提供了一個稱為USB core的子系統來處理了大部分的複雜工作,所以這裡所描述的是驅動程式和USB core之間的介面。 在USB裝置群組織結構中,從上到下分為裝置(device)、配置(config)、介面(interface)和端點(endpoint)四個層次。 對於這四個層次的簡單描述如下: 裝置通常具有一個或多個的配置 配置經常具有一個或多個的介面
Time of Update: 2018-12-06
USB urb (USB request block)核心使用2.6.29.4 USB 裝置驅動代碼通過urb和所有的 USB 裝置通訊。urb用 struct urb 結構描述(include/linux/usb.h )。 urb以一種非同步方式同一個特定USB裝置的特定端點發送或接受資料。一個 USB 裝置驅動可根據驅動的需要,分配多個 urb 給一個端點或重用單個 urb 給多個不同的端點。裝置中的每個端點都處理一個 urb 隊列, 所以多個 urb
Time of Update: 2018-12-06
由於前面的學習中有用到 第十一章 核心資料結構類型 的知識,所以我先看了。要點如下:將linux 移植到新的體繫結構時,開發人員遇到的若干問題都與不正確的資料類型有關。堅持使用嚴格的資料類型和使用 -Wall -Wstrict-prototypes 進行編譯可能避免大部分的 bug。核心資料使用的資料類型主要分為 3 個類型: 標準 C 語言類型、確定大小的類型和特定核心對象的類型。 標準 C 語言類型當需要“一個2位元組填充符”或“用一個4位元組字串來代表某個東西”,就不能使用標準C語言類型,
Time of Update: 2018-12-06
在學習有關I/O匯流排的內容時,最好先看看相關的知識:從PC匯流排到ARM的內部匯流排 I/O 連接埠和 I/O 記憶體每種外設都是通過讀寫寄存器來進行控制。 在硬體層,記憶體區和 I/O 地區沒有概念上的區別: 它們都是通過向在地址匯流排和控制匯流排發出電平訊號來進行訪問,再通過資料匯流排讀寫資料。因為外設要與I\O匯流排匹配,而大部分流行的 I/O 匯流排是基於個人電腦模型(主要是 x86 家族:它為讀和寫 I/O 連接埠提供了獨立的線路和特殊的 CPU 指令),所以即便那些沒有單獨I/O
Time of Update: 2018-12-06
可以讓裝置在產生某個事件時通知處理器的方法就是中斷。一個“中斷”僅是一個訊號,當硬體需要獲得處理器對它的關注時,就可以發送這個訊號。 Linux 處理中斷的方式非常類似在使用者空間處理訊號的方式。 大多數情況下,一個驅動只需要為它的裝置的中斷註冊一個處理常式,併當中斷到來時進行正確的處理。本質上來講,中斷處理常式和其他的代碼並行運行。因此,它們不可避免地引起並發問題,並競爭資料結構和硬體。 透徹地理解並發控制技術對中斷來講非常重要。 安裝中斷處理常式核心維護了一個中斷訊號線的註冊表,類似於
Time of Update: 2018-12-06
Linux 常用搜尋檔案命令 whereis <程式名稱>尋找軟體的安裝路徑-b 只尋找二進位檔案-m 只尋找協助檔案-s 只尋找原始碼-u 排除指定類型檔案-f 只顯示檔案名稱-B <目錄> 在指定目錄下尋找二進位檔案-M <目錄> 在指定目錄下尋找協助檔案-S <目錄> 在指定目錄下尋找原始碼locate <檔案名稱>在檔案索引資料庫中搜尋檔案-d <資料庫路徑>
Time of Update: 2018-12-06
本文講解了Linux建立檔案命令的方法 ,希望對您的學習有所協助。 建立檔案夾 mkdir aaa mkdir -p aaa 建立檔案命令 vi foo.txt emacs foo.txt echo "aaaa" > foo.txt cat > foo.txt 清除命令 > foo.txt mkdir /home/u1 建立檔案夾/home/u1 chown oracle /home/u1 表示改變目錄所有者為oracle賬戶; chgrp dba
Time of Update: 2018-12-06
1, 修改IP ifconfig + 連接埠號碼 + IP/netmask 啟動網卡 ifconfig etho up Or restart all interfaces service networking start to 查看當前路由 route -n 加網關 route add default gw XXX2,使用apt-cache 尋找最新的軟體包比如想安裝gcc sudo
Time of Update: 2018-12-06
Redhat Linux下修改ip:編輯檔案/etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0 //裝置名稱,不要修改BOOTPROTO=static //不要修改BROADCAST=10.10.22.255 //廣播位址,一般為本網段的最後一個IPIPADDR=10.10.22.145 //ip地址NETMASK=255.255.255.0 //子網路遮罩NETWORK=10.10.22.0 //網段地址ONBOOT=yes
Time of Update: 2018-12-06
如何 在windows添加一條靜態路由1、添加一條路由表Route add 60.232.142.40 mask 255.255.255.248 192.168.100.250 metric 3 if 2添加一條路由記錄,所有到60.232.142.40/29網段的資料包,都通過2號介面卡(網卡)走192.168.100.250的網關,優先順序為3。(結果會怎樣?)Route add –p 60.232.142.40 mask 255.255.255.248 192.168.100.250
Time of Update: 2018-12-06