linux驅動筆記
該文重點給出了三個實例來講解Linux驅動,使新手快速、從代碼層了解什麼是Linux設備驅動。
本文算是筆記,大體上是翻譯該文的前兩部分,即前兩個實例,這兩個例子都可能正確成功運行。
文件: Writing device drivers in Linux.pdf
大小: 216KB
下載: 下載
所需知識
- C 語言編程
- 微處理器編程.對處理器的工作原理有一定的了解,如內存管理、中斷等
用戶空間和內核空間
寫設備驅動時,了解「用戶空間」和「內核空間」之間的區別是非常重要的。
- 內核空間。Linux內核簡單並高效地管理著機器的硬體,為用戶提供簡單並
規范的編程介面。同樣地,內核,特別是內核中的驅動,是用戶/程序員與硬
件之間的橋梁或介面。內核的任何常式或函數(比如模塊、驅動)都屬於內核
空間。
- 用戶空間。用戶程序,比如unix shell或其他的gui應用程序(比如
kpresenter),都屬於用戶空間。顯然,這些應用程序都要與硬體打交道。但是
它們不並直接操作硬體,而是通過內核提供的函數來實現。
用戶空間與內核空間之間的介面函數
內核為用戶空間提供了一系列的常式或函數,用戶的應用程序利用這些介面來與硬體交互
。通常,在UNIX或Linux系統中,這種對話是通過函數或子程序來讀寫文件的。原因是從
用戶的角度來看,UNIX設備就是文件。
另一方面,在內核空間中Linux也提供了一系列的函數或子程序來完成底層與硬體的交互
,並允許從內核向用戶空間傳遞信息。
通常,每個用戶空間的(設備或文件允許使用的)函數,都能在內核空間中找到一個類似
的函數,(允許信息從內核傳遞給用戶空間,反之亦然)
內核空間與硬體設備之間的介面函數
內核空間中有許多函數用於控制硬體或在內核與硬體之間交互信息。
第一個驅動:在用戶空間載入和移除驅動
現在將展示如何完成第一個驅動,在內核中將看作模塊
新建一個文件nothing.c如下
include
MODULE_LICENSE(「Dual BSD/GPL」);
2.6.x版本後的內核,編譯模塊會略微復雜一點。首先,需要有一份完整的、編譯過的內
核源碼樹。在下面的文字中,將假設使用2。6。8版本的內核。
其次,需要一個makefile文件,本例中的makefile文件名為Makefile,內容如下:
obj-m := nothing.o
與之前版本的內核不同,現在編譯模塊時使用的內核需要與模塊將要載入的內核相同。
編譯上面的文件,可以使用命令:
make -C /usr/src/kernel-source-2.6.8 M=pwd moles
這個極其簡單的模塊就屬於內核空間,一旦其被載入,它就是內核空間的一部分。
在用戶空間,可以使用下面的命令載入它,需要root許可權:
insmod nothing.ko
insmod 這個命令用於為內核載入模塊。盡管現在我們已經載入了nothing.ko這個模塊,
但是這個模塊畢竟沒有任何用處。
可以通過查看系統里已載入的模塊來檢查是否已經成功載入了nothing.ko
lsmod
最後,需要卸載該模塊時使用下面的命令:
rmmod nothing
重新使用lsmod,可以發現nothing模塊已經不在了。
「Hello world」驅動:在內核空間載入和移除驅動
當一個模塊設備驅動載入到內核,將執行一些初始的工作,如重新設置設備,reserving
RAM, reserving interrupts, reserving input/output ports, etc.
這些工作得以在內核空間執行,必須要有兩個函數存在:mole_init 和
mole_exit;它們對應於用戶空間的insmod和rmmod命令。總之,用戶命令insmod和
rmmod使用了內核空間的函數mole_init和mole_exit.
來看一個經典的程序 HELLO WORLD:
//hello.c#include #include #inlucde MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void)
{
printk("<1> Hello world!\n"); return 0;
}static void hello_exit(void)
{
printk("<1> Bye, cruel world!\n");
}
mole_init(hello_init);
mole_exit(hello_exit);
其中hello_init 和 hello_exit 函數可以取任意名,但為了載入和移除功能是更容易識
別,它們作為參數傳遞給函數mole_init 和 mole_exit.
printk函數與printf函數非常類似,但printk只工作在內核中。<1>表示列印信息
為最高優先順序(數字越低,優先順序越高)。這樣,不僅可以在內核系統日誌中看到該
列印信息,還能在系統控制台接收到該列印信息。
可以用之前的命令來編譯這個模塊,此時只需要將模塊名加入到Makefile文件中即可:
obj-m := nothing.o hello.o
本文的其他部分,將Makefile作為給讀者的練習。一個完整的Makefile文件可以編譯
本教程中的所有示例模塊。
當模塊被載入或卸載時,通過printk列印的信息將會出現在系統控制台。如果列印
信息沒有出現在終端里,則可通過dmesg命令或查看系統日誌文件(cat
var/log/syslog)看到列印信息。
『貳』 如何簡化linux usb 驅動 實驗報告
《LINUX設備驅動程序》
USB骨架程序(usb-skeleton),是USB驅動程序的基礎,通過對它源碼的學習和理解,可以使我們迅速地了解USB驅動架構,迅速地開發我們自己的USB硬體的驅動。
前言
在上篇《Linux下的硬體驅動--USB設備(上)(驅動配製部分)》中,我們知道了在Linux下如何去使用一些最常見的USB設備。但對於做系統設計的程序員來說,這是遠遠不夠的,我們還需要具有驅動程序的閱讀、修改和開發能力。在此下篇中,就是要通過簡單的USB驅動的例子,隨您一起進入 USB驅動開發的世界。
USB驅動開發
在掌握了USB設備的配置後,對於程序員,我們就可以嘗試進行一些簡單的USB驅動的修改和開發了。這一段落,我們會講解一個最基礎USB框架的基礎上,做兩個小的USB驅動的例子。
USB骨架
在Linux kernel源碼目錄中driver/usb/usb-skeleton.c為我們提供了一個最基礎的USB驅動程序。我們稱為USB骨架。通過它我們僅需要修改極少的部分,就可以完成一個USB設備的驅動。我們的USB驅動開發也是從她開始的。
那些linux下不支持的USB設備幾乎都是生產廠商特定的產品。如果生產廠商在他們的產品中使用自己定義的協議,他們就需要為此設備創建特定的驅動程序。當然我們知道,有些生產廠商公開他們的USB協議,並幫助Linux驅動程序的開發,然而有些生產廠商卻根本不公開他們的USB協議。因為每一個不同的協議都會產生一個新的驅動程序,所以就有了這個通用的USB驅動骨架程序, 它是以pci 骨架為模板的。
如果你准備寫一個linux驅動程序,首先要熟悉USB協議規范。USB主頁上有它的幫助。一些比較典型的驅動可以在上面發現,同時還介紹了USB urbs的概念,而這個是usb驅動程序中最基本的。
Linux USB 驅動程序需要做的第一件事情就是在Linux USB 子系統里注冊,並提供一些相關信息,例如這個驅動程序支持那種設備,當被支持的設備從系統插入或拔出時,會有哪些動作。所有這些信息都傳送到USB 子系統中,在usb骨架驅動程序中是這樣來表示的:
static struct usb_driver skel_driver = {
name: "skeleton",
probe: skel_probe,
disconnect: skel_disconnect,
fops: &skel_fops,
minor: USB_SKEL_MINOR_BASE,
id_table: skel_table,
};
變數name是一個字元串,它對驅動程序進行描述。probe 和disconnect 是函數指針,當設備與在id_table 中變數信息匹配時,此函數被調用。
fops和minor變數是可選的。大多usb驅動程序鉤住另外一個驅動系統,例如SCSI,網路或者tty子系統。這些驅動程序在其他驅動系統中注冊,同時任何用戶空間的交互操作通過那些介面提供,比如我們把SCSI設備驅動作為我們USB驅動所鉤住的另外一個驅動系統,那麼我們此USB設備的 read、write等操作,就相應按SCSI設備的read、write函數進行訪問。但是對於掃描儀等驅動程序來說,並沒有一個匹配的驅動系統可以使用,那我們就要自己處理與用戶空間的read、write等交互函數。Usb子系統提供一種方法去注冊一個次設備號和file_operations函數指針,這樣就可以與用戶空間實現方便地交互。
『叄』 求教怎麼學習linux內核驅動
1.首先要了解為什麼要學習內核?下圖已表明,如果要從事驅動開發或系統研究,就要學習內核。
2.內核的知識就像下面的繩結一樣,一環扣一環,我們要解開它們,就必須要先找到線頭也就是內核中的函數介面。初學階段,我們一般不深入的研究內核代碼,會使用內核的介面函數就不錯了。
3.下面提供了如何學習這些內核函數的方法,就像解繩子一樣
4.學習內核的四步法則,思維導圖的設計尤為重要,這也是能否學習好內核的關鍵
5.語言基礎也需要扎實,所以需要把C語言鞏固鞏固
『肆』 Linux學習筆記_3_Linux常用命令_4_幫助命令
1、man[manual]:
/usr/bin/man
獲得命令或配置文件的幫助文檔,優先查看命令的幫助
man[命令或配置文件]//會調用more
e.g.
manls查看ls命令的幫助信息
manservices查看配置文件services的幫助信息
附:在linux系統中幫助文件分為九種
如:
man5
passwd
//查看配置文件的幫助
默認:
man1
passwd
2、info[information]:/usr/bin/info
說明:與man沒有太大的區別,只不過是信息的呈現方式不太一樣,並且在UNIX系統中並沒有這個命令。
3、獲取相關文件簡短的信息:
/usr/bin/whatisapropos
/usr/sbin/makewhatis
獲得索引的簡短說明信息,找到這個命令最基本的用途
whatis[任何關鍵字]
附:
[命令]-
-
help
主要用於獲取命令的選項信息
apropos[文件]
用於獲取文件的配置信息,類似與:man-k
[文件]
makewhatis
建立whatis和apropos搜索使用的資料庫,當使用這兩個命令發生錯誤時,就是
whatisdatabase沒有建立
4、help
查看Shell內置命令的文件幫助
如:
mancd與helpcd的不同
另:關於Shell更詳細的講解,請參考另外幾篇博客
《四天精通Shell編程》系列:
http://blog.csdn.net/zjf280441589/article/details/17455515
http://blog.csdn.net/zjf280441589/article/details/17467069
http://blog.csdn.net/zjf280441589/article/details/17487351
http://blog.csdn.net/zjf280441589/article/details/17503985
『伍』 想學習Linux 驅動,需要什麼知識
首先,接觸linux操作系統,在你的電腦上裝一個linxu操作系統(建議ubuntu,比
較友好),熟悉經常要用的命令,熟悉環境(建議看「鳥哥的linux私房菜」)。
其次,閱讀經典書籍是不可少的,建議先看ldd前四章,大概了解linux驅動的框架
,驅動是做什麼的,該如何寫驅動,那本書上有一些例子,可以在你的電腦上編譯
,執行看看。後面的章節在結合自己的情況而定。
第三,建議閱讀ulk(understanding the linux kernel)所有的內容,了解linux
內核的一些基本知識,在心中建立一個框架,不必完全懂,深入了解就好,以後經
常翻翻,受益無窮!
第四,別著急,這才是你真的進入linux驅動的第一步,花點錢買個開發板吧,然
後了解代碼的編譯,下載,看看板子的datasheet,針對自己感興趣的深入研究。
建議學習流程,led燈控制---tp---i2c匯流排-----lcd-----camera----flash----
wifi/bt等。因為這個裡面牽涉了甚多內核的子系統(input,v4l2,fb等
),所以可能要多話時間看代碼,了解代碼的框架,設計的思想等,只要一步一個
腳印,一定會有所成。
第五,因為現在的移動設備大多數都是android的了,所以你就要看看linux
kernel在android的作用,然後往上看看,看看hal層的代碼,這些在調試中都是需
要的,如果有興趣,更加可以看看framework的代碼了,學習android一些工作機制
,類似於surfaceflinger,audioflinger等等。。
《linux就該這么學》免費提供最新Linux技術教程書籍,為開源技術愛好者努力做
得更多更好
『陸』 《Linux下部分常用指令筆記》
一、創建linux維護用戶
登錄root用戶
創建新用戶
useradd 新用戶名
設置用戶密碼
passwd 新用戶密碼
二、安裝jdk和配置環境變數
建議在root用戶下直接安裝jdk,並直接配置環境變數,同時給非root用戶設置讀和執行許可權
解壓包
tar xvf jdk包名.tar
配置全局變數
編輯/etc/profile文件
vi /etc/profile
按I鍵,切換成編輯模式。
在文件未加入一下配置
export java_HOME=jdk的解壓文件目錄
export JRE_HOME=jdk的解壓文件目錄/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${ JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${ JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
保存並退出
Esc
:wq
重載配置文件使其生效
source /etc/profile
檢查是否安裝成功
Javac
Java version
許可權修改
讀4寫2執行1,順序所有者、組成員、其他用戶
Chomd 755 jdk的解壓文件目錄
三、安裝tomcat
安裝tomcat和放入war包使用非root的維護用戶
如果使用root安裝的話記得設置許可權。( chomd -r 外層文件目錄 )
su - 用戶名
1、解壓包
tar xvf tomcat包名.tar
2、將war包放入tomcat/webapps目錄下
3、Tomcat啟動服務和停止服務
查看進程
ps -ef | grep java
啟動應用
Tomcat bin目錄下.startup.sh
停止應用
建議使用
Kill -9 進程號
註:解壓出應用文件後,注意配置信息的修改
四、IBM MQ部署 (7.5之後的版本)
(以下是使用9.0版本的正確部署命令)
一、 卸載舊版本IBM MQ (可選)
<因為部署環境沒有安裝過mq,卸載這部分命令我沒有親自測試過>
設置環境
以用戶身份登錄到組mqm,找到mq的安裝位置 /opt/mqm
source ./setmqenv -s
查看隊列管理器的狀態
dspmq -o installation
停止與要卸載的安裝關聯的所有正在運行的隊列管理器
endmqm SXRECV
停止與隊列管理器關聯的所有偵聽器。
endmqlsr -m SXRECV
查看系統上當前安裝的軟體包(組件)
sudo rpm -qa | grep MQSeries
列出軟體包並一次性卸載
sudo rpm -qa | grep MQSeries | xargs rpm -ev
再將對應的用戶及安裝目錄給刪除
rm -rf /opt/mqm
userdel -r mqm
檢查MQ license
license文件在安裝目錄中 /opt/mqm/lib 可以找到
amqtcert.lic - is a trial license
amqbcert.lic - is a beta license
amqpcert.lic - is the proction license
——————————————————————————————————————
二、安裝新版本ibm mq
解壓,解壓文件都在MQServer中
tar –xzvf IBM_MQ_9.1.5_LINUX_X86-64.tar.gz
進入MQServer文件夾中:
cd MQServer/
運行MQ許可證程序
./mqlicense.sh
安裝WebSphere MQ for Linux伺服器(Runtime、SDK 和 Server 軟體包):
rpm -U MQSeriesRuntime-9.1.5-0.x86_64.rpm
rpm -U MQSeriesSDK-9.1.5-0.x86_64.rpm
rpm -U MQSeriesServer-9.1.5-0.x86_64.rpm
安裝WebSphere MQ for Linux客戶機:
rpm -U MQSeriesClient-9.0.0-0.x86_64.rpm
安裝WebSphere MQ樣本程序:
rpm -U MQSeriesSamples-9.0.0-0.x86_64.rpm
創建組和用戶
安裝過程創建了一個名為mqm的用戶和一個同樣名為 mqm 的組。設置一個密碼來解鎖。
passwd mqm
——————————————————————————————————————
三、 配置
(這部分隊列管理器、通道、隊列等根據實際情況自行配置)
切換用戶:
su mqm
創建隊列管理器
使用crtmqm命令來創建一個名為 SXRECV
的隊列管理器。我們把它作為預設隊列,並且將不在創建時指定死信隊列。然後使用strmqm命令啟動隊列管理器。
crtmqm -q SXRECV
strmqm SXRECV
——————
如果執行crtmqm命令時提示
-bash-3.2$ crtmqm
-bash: crtmqm: command not found
find / -name crtmqm
則需要配置mqm用戶的環境變數,編輯如下文件,並添加下面的內容,如下:
第一種方法:相對第二種較安全僅對mqm用戶有效
方法一:
(1) -bash-3.2$ vi /var/mqm/.bash_profile --有可能會在文件夾下看不到這個文件,通過編輯即可看到
PATH=$PATH:/opt/mqm/samp/bin:/opt/mqm/bin:bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin
(2)執行「.」命令,使這個文件生效
-bash-3.2$ source .bash_profile
(3)再次嘗試實行crtmqm或是dspmqm命令,即可發現已經生效。
方法二:
( 1)
su root
[if !supportLists](2)[endif]
vim /etc/profile
[if !supportLists](3)[endif] 在最後面加上:
PATH=$PATH:/opt/mqm/samp/bin:/opt/mqm/bin:bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/bin
( 4)關閉遠程終端重新打開,無需重啟伺服器
——————
運行隊列管理器
runmqsc SXRECV
創建通道和隊列
DEFINE QLOCAL (XYDATA) REPLACE USAGE (NORMAL) DEFPSIST (YES) MAXDEPTH (300000) DESCR('興業銀行')
DEFINE QLOCAL (XYTRANS) REPLACE USAGE (XMITQ) DEFPSIST (YES) MAXDEPTH (300000) DESCR('興業銀行')
DEFINE QREMOTE (XYACK) REPLACE DEFPSIST (YES) RQMNAME (SXSEND) RNAME (XYACK) XMITQ (XYTRANS) DESCR('XXXX')
DEFINE CHANNEL (XYDATA) CHLTYPE (RCVR) TRPTYPE (TCP) REPLACE DESCR('XXXX')
DEFINE CHANNEL (XYACK) CHLTYPE (SDR) CONNAME ('166.1.1.8(2214)') XMITQ (XYTRANS) TRPTYPE (TCP) DISCINT (0) CONVERT (NO) SHORTRTY (30) SHORTTMR (10) LONGRTY (999999999) LONGTMR (20) REPLACE DESCR('XXXX')
DEFINE CHANNEL (SVRCONN) CHLTYPE (SVRCONN) MCAUSER('mqm')
創建監聽
DEFINE LISTENER (RECLISTENER) TRPTYPE (TCP) CONTROL(QMGR) PORT (2214)
啟動監聽
start LISTENER(RECLISTENER)
啟動通道
start channel(SVRCONN)
start channel(XYDATA)
start channel(XYACK)
———————————————————————————————————————————————————
四、2035錯誤碼 說明
如果程序連接mq報錯2035,則需要對許可權認證做設置,則進行以此操作
1、
ALTER QMGR CHLAUTH(DISABLED)
2、
ALTER CHL(通道名) CHLTYPE(SVRCONN) MCAUSER('mqm')
3、
ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)
或者直接將連接認證選項置為空,將其完全關閉,指令如下:
ALTER QMGR CONNAUTH('')
在執行完上述兩條命令中的任一條後,都需要刷新連接認證的緩存,指令如下:
REFRESH SECURITY TYPE(CONNAUTH)
五、mq操作命令
一、MQ的啟動與停止
1、MQ的啟動
strmqm QMgrName
如果啟動默認隊列管理器,strmqm後可以忽略隊列管理器名稱。
2、MQ的關閉
endmqm -i QMgrName
停止mq
二、MQ運行狀態查看與常用操作
1、 查看隊列管理器運行狀態
su mqm
執行如下命令檢查隊列管理器運行狀態:dspmq顯示結果中QMNAME表示MQ隊列管理器的名稱,STATUS表示當前運行狀態。運行狀態有如下幾種:Starting正在啟動Running正在運行Ending正在停止Ended normally已經正常終止Ended immediately已經立即終止Ended preemtively已經強制終止Ended unexpectively異常終止
注意:停止MQ後必須使用dspmq命令進行狀態檢查
2、查看通道運行狀態與啟停通道
runmqsc
dis chl(*);查看所有通道定義
dis chs(*);查看所有通道狀態,如果沒有查詢到通道狀態,或報錯AMQ8420: Channel Status not found,請啟動通道
dis chs(ChannelName); 查看通道ChannelName的狀態
通道狀態有如下幾種:
STARTING正在啟動BINDING正在綁定INITIALIZING正在初始化RUNNING正常STOPPING 正在停止RETRYING重試PAUSED等待STOPPED已停止REQUESTING請求
start chl(ChannelName);啟動通道
stop chl(ChannelName);停止通道
* 重置通道
reset channel(ChannelName); 重置通道序號。當本地與其他MQ隊列管理器的通道無法正常啟動的情況,檢查日誌發現是通道序號不一致,此時就需要先停止發送方通道,清空隊列深度並在發送方和接收方進行通道計數的重置,重置後啟動通道即可恢復通訊。
注意:重置成功mq序列號一般相同或相差1
3、查看通道監聽狀態與啟停監聽
runmqsc
dis listner(*);查看通道監聽定義
dis lsstatu(listnerName);查看監聽狀態
start lstr(listnerName); 啟動監聽
stop lstr(listnerName); 停止監聽
4、查看隊列深度
runmqsc
dis q(*);查看所有各類隊列的屬性
dis qlocal(QName);查看所有本地隊列的屬性
隊列深度屬性為:CURDEPTH
查看隊列深度display ql('隊列名') curdepth
*清空隊列深度
清空隊列深度
clear ql(『隊列名』)
三、MQ發送和接收消息
su mqm
發送消息
amqsput 隊列名 隊列管理器
獲取消息
amqsget 隊列名 隊列管理器
可通過配合查看隊列深度命令,完成mq的聯調
六、其他維護中常用linux命令
1、測試埠連接
telnet ip port
2、查看已啟動的埠
netstat -an | grep 埠號
3、查看應用進程
ps -ef |grep java
4、修改許可權
chomd XXX(對應的許可權) 文件目錄
5、修改文件或目錄下所有文件所有者和組
Chomd -R 用戶名:組名 文件目錄
6、查看目錄內容
ls 或者ls -l (簡寫ll)
7、查看文件輸出
cat 目錄/文件名
或者
Vi 目錄/文件名 按i可進入編輯
按 G 到文檔末尾
按 gg 到文件首行
不保存退出
Esc :q!
保存退出
Esc :wq
vi 進入文檔文檔後查找關鍵字
Esc 進入命令行
/關鍵字
按n向下繼續查找
按N向上繼續查找
8、殺進程
Kill -9 進程號
9、復制
cp -r 源目錄 目標目錄
10、移動
mv -i 源文件或目錄 目標文件或目錄
11、刪除
rm -R 文件目錄
12、 切換工作目錄
cd 相對路徑或絕對路徑
~也表示為 home 目錄 的意思, . 則是表示目前所在的目錄, .. 則表示目前目錄位置的上一層目錄。
『柒』 Linux命令筆記
運維管理命令
netstat -nap 查看系統正在開放的埠
netstat -tnlp | grep 80 查看哪個服務佔用了80埠(-t表示只列出tcp協議的連接)
netstat -anptu | grep tcp 查看當前開放的所有tcp埠
rm -r 文件名 刪除文件 (-r 遞歸) (-f 強制)
rm -rf ./* 刪除當前目錄里的所有文件
mv 文件路徑 目標路徑 移動文件到指定目錄
mv 文件名a 文件名b 將文件名a重命名為文件名b
mv ./* ../ROOT/ 把當前目錄下的所有文件移動到上級目錄的ROOT文件夾裡面
cp 起始路徑 目標路徑 將一個文件從一個地址復制到另一個地址
cp 文件1 文件2 將文件1復制一份命名為文件2
ssh 遠程主機的用戶名@遠程主機ip 遠程登錄伺服器(如果無法登陸,刪除本地.ssh文件里的known_hosts文件里的內容)
scp -r 本地路徑 user@ip:伺服器路徑 將本地文件傳到伺服器
scp user@ip:伺服器路徑 本地路徑 將伺服器文件傳到本地
chmod -R 777 文件路徑 賦予指定文件所有許可權
chmod -R 777 . 以遞歸的方式修改當前目錄下所有文件和子目錄的許可權
rpm -qa | grep httpd 查詢是否安裝httpd服務,並列出安裝文件
rpm -e 軟體名 查詢某個軟體是否被安裝 (只有通過yum安裝的才能查詢到)
ps -ef | grep java 顯示當前進程及參數,並過濾出java程序的進程 { PID表示這個程序的ID,PPID表示這個程序的父程序的ID }
kill PID 立即終止這個進程
crontab -e 編寫計劃任務(語法格式:分 時 日 月 周 需要執行的命令)
mkdir a 創建一個名稱為a的文件夾
touch 文件名.文件格式 創建一個帶後綴的文件
-sh 文件路徑 查看指定路徑的文件的大小
grep "關鍵詞" 文件名 查找文件中帶這個關鍵詞的文件
系統維護命令
service 服務名 start/stop/restart 在deb包管理的系統中開關服務的命令
systemctl start/stop/restart 服務名 在rpm包管理的系統中開關服務的命令
man 命令 解釋這個命令
history 數字 顯示最近使用的命令
apt-get install 命令符號 安裝命令程序
apt-get purge 命令符號 卸載命令程序
which 程序名 搜索某個程序路徑
whereis 軟體名 搜索某個軟體路徑
echo $PATH; 查看標准路徑目錄
dmesg -T 顯示系統接入設備日誌
sudo nautilus 文件路徑 以管理員身份打開文件夾進行刪改
df -h 查看磁碟使用情況
fdisk -l 查看分區具體情況
route 檢查自己的路由表
traceroute url 檢查本機到url的完整路徑
git clone github地址 從github下載文件到本地
常用路徑的作用
cd /bin 進入根目錄下的bin目錄
cd bin 進入當前目錄下的bin目錄
/etc/init.d 系統的啟動文件目錄,可以使用start啟動著裡面的文件 如:./bluetooth start 啟動藍牙
/usr/share / 從源安裝的軟體的文件默認存放地址
windows系
快捷鍵
Alt + Esc 切換活動窗口
Alt + F4 關閉當前程序
win + D 顯示和隱藏桌面
win + I 打開設置
win + M 最小化所有窗口
win + Tab 打開任務視圖
Ctrl + win + D 添加虛擬桌面
Ctrl + win + 切換虛擬桌面
Ctrl + win + F4 關閉你正在使用的虛擬桌面
打開服務配置
gpedit.msc 打開組策略
services.msc 打開服務控制
sysdm.cpl 打開系統屬性(配置環境變數等操作)
chcp 65001 設置cmd為utf8字元集
c: MenuPrograms windows啟動程序路徑
在cmd中游標只有在當前行才能 ctrl + v 進行粘貼
windows下的ssh的使用
C:ProgramDatassh sshd_config配置文件所在目錄,修改這個文件可以更改ssh連接到win後所在的目錄 #ChrootDirectory none 改成 ChrootDirectory C: 然後重啟ssh server服務,這樣用linux連接到win後就會到 C: 目錄下
將linux上的 a.txt文件 復制到windows的 c盤的a文件夾中
scp user@ip:/home/username1/視頻/a.txt /c:/a ( -r 遞歸傳送 )
將windows的 c盤的a文件夾中的c.txt文件 復制到linux的中
scp /c:/a/c.txt user@ip:/home/username1/視頻/a ( -r 遞歸傳送)
只能在windows系統上操作上面的兩條命令,win中的user是用戶文件夾里的文件夾名字。
在Mysql安裝的目錄中找到bin目錄,復制此路徑到系統屬性的『高級』中的環境變數path里,這樣就可以在cmd中運行 mysql -u root -p
Dos命令
『捌』 linux如何安裝驅動
在Intel網站直接下載的Linux驅動是e1000-5.2.52.tar.gz(版本可能會有改變),這個壓縮包裡面沒有編譯好的.o的文件,需要在Linux系統下編譯之後才能使用,
因為網卡需要編譯,所以要先確認將內核源文件安裝好,下面是關於內核源文件的安裝
● Linux下添加內核源文件
1. 用rpm –qa|grep kernel-source查看是否安裝了這個包;
如果返回結果中有kernel-source-xxx(其中xxx為當前redhat的內核版本,如rhel3為2.4.21-4EL), 即已經 安裝。如無返回結果則需要安裝kernel-source包。到安裝光碟中找到kernel-source-xxx.i386.rpm,用下面命令安裝此rpm包:
2.如果安裝了用rpm -V kernel-source校驗是否有文件丟失,如果沒有輸出,表示文件完整;
3.如果有丟失用rpm -ivh --force kernel-source-xxxx...把包重新安裝一下;
這個kernel-source包,在您的RH安裝光碟中,在Redhat/RPMS中,如果以前沒有安裝過這個包,那麼用rpm -ivh kernel-source-xxxx...來安裝,如果安裝過,需要覆蓋安裝,使用rpm -ivh --force kernel-source-xxxx...這個命令強制安裝。
註:AS 4 開始,沒有kernel-source這個包了,取而代之的是kernel-dev這個包,檢查這個包有沒有安裝的方法同上
● 驅動安裝步驟:
1. 把這個tar文件拷貝到用戶自己定義的目錄中,例如:
/home/username/e1000 or /usr/local/src/e1000
2. 用tar命令解這個壓縮包:
tar zxf e1000-5.2.52.tar.gz
3. 切換到驅動的src目錄下:
cd e1000-5.2.52/src/
4. 編譯這個驅動模塊:
make
然後安裝這個模塊
make install
這個二進制元將被安裝到如下位置:
/lib/moles//kernel/drivers/net/e1000.o
以上的路徑是默認的安裝位置,在某些linux版本中可能是其他位置,具體信息可以查看在驅動的 tar壓縮包中的ldistrib.txt文件.
5. 安裝模塊:
insmod e1000 (2.6以上的版本最好使用全路徑安裝 P insmod /lib/moles//kernel/drivers/net/e1000/e1000.ko)
6. 設定網卡IP地址:
ifconfig ethx <IP_address> x是網卡介面的號
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
若多個網卡的晶元相同可以cp ifcfg-eth0 ifcfg-eth1~~~~~~
修改下裡面的drive名稱就OK
!!!!!!!!!!!!!!!!!!!
在網卡的編譯中很可能不能進行下去~這個原因除了kernel的開發包沒有安裝外還可能是由於開發環境不完全所引起的!
這時就需要你講開發環境安裝完成,最簡單的辦法就是通過 sysconfig-config-packet 安裝gcc
安裝完成後繼續執行 make ;make install
了解更多開源相關,去LUPA社區看看吧
『玖』 ZYNQ+linux網口調試筆記(3)PL-ETH
在ZYNQ上使用gigE Vision協議的網路介面相機。
第一步:調通PS側網口GEM0(Xilinx BSP默認配好)。
第二步:調通PS側網口GEM1(見前一篇文檔:開發筆記(1))。
第三步:調通PL側網口(本文闡述)。
第四步:在PL側網口上驗證Jumbo Frame特性,並在應用層適配gigE Vision協議。
根據《xapp1082》可知,PL側的PHY支持1000Base-X和SGMII兩種配置,這兩種配置對應兩種不同的PHY引腳介面(連接到MAC)。而我們的hdf文件使用的是1000Base-X的配置。
關於網口的Linux驅動,我們在官網找到一份資料: Xilinx Wiki - Zynq PL Ethernet 。資料很長,我們只看與我們相關的2.4.1 PL Ethernet BSP installation for 1000Base-X」這一章節就可以了。
首先導入FPGA設計同事提供的hdf文件:
在彈出的圖形界面里,進入Subsystem AUTO Hardware Settings——Ethernet Settings——Primary Ethernet,確認可以看到PL側網路設備axi_ethernet_0,說明hdf文件里已包含了必要的網口硬體信息:
上圖中被選中的網口將成為Linux上的設備eth0。這里我們默認選擇ps7_ethernet_0,即使用GEM0作為首選網口。
啟用Xilinx AXI Ethernet驅動
進入Device Drivers -- Network device support – 選中Xilinx AXI Ethernet(以及Xilinx Ethernet GEM,這是PS側網口的驅動)
進入Networking support – 選中 Random ethaddr if unset
進入Device Drivers -- Network device support -- PHY Device support and infrastructure – 啟用Drivers for xilinx PHYs
進入~~~~Device Drivers -- DMA Engine Support -– 禁用~~~~Xilinx AXI DMAS Engine~~~ (對應的配置項名為 ~~ CONFIG_XILINX_DMA ~~~)
注意: Xilinx Wiki里對設備樹節點的引用有誤(&axi_ethernet),導致編譯報錯,應改為&axi_ethernet_0。
註:PL-ETH驅動所在路徑:<project>/build/tmp/work-shared/plnx_arm/kernel-source/drivers/net/ethernet/xilinx/xilinx_axienet_main.c和xilinx_axienet_mdio.c。對應的內核配置項為CONFIG_NET_VENDOR_XILINX和CONFIG_XILINX_AXI_EMAC。
啟用ethtool和tcpmp(調試用,非必須):
然後將生成的BOOT.BIN和image.ub拷貝到SD卡根目錄下,將SD卡插入板子上,上電運行。
上電後,使用ifconfig eth1查看網口信息,觀察MAC地址與設置的一致,且ifconfig eth1 192.168.1.11 up沒有報錯。
測試網路通路:ping PC是通的。說明網口工作正常。
Linux下eth1(即PL-ETH)的MAC地址有誤
問題描述:
開機列印:
注意:
MAC地址是錯的,驅動里解析出的是GEM0的MAC地址。
試驗發現,即使在system-user.dtsi里不寫local-mac-address,也照樣解析出的是GEM0的MAC。
而將system-user.dtsi里的local-mac-address改名為pl-mac-address,並將驅動里解析的字元串也對應更改為pl-mac-address,則可以正確解析出來:
Passing MAC address to kernel via Device Tree Blob and U-Boot:
http://zedboard.org/content/passing-mac-address-kernel-device-tree-blob
通過更改u-boot環境變數和設備樹,為每個板子設置一個獨特的MAC地址:
https://www.xilinx.com/support/answers/53476.html
U-Boot里的環境變數ethaddr會覆蓋掉設備樹里pl-eth的local-mac-addr欄位,從而影響Linux啟動後的網卡MAC地址;
但U-Boot里的環境變數ipaddr不會對Linux啟動後的配置產生任何影響。因為設備樹里根本就沒有關於IP地址的配置。
phy-mode怎麼會是sgmii?查了下官方的提供的BSP里,也是「sgmii」。說明這個沒問題。具體原因不清楚。
@TODO: 設備樹里的中斷號的順序如何影響功能?
為何讀出來的IRQ號不對呢?這是因為這里讀到的不是硬體的中斷號,而是經過系統映射之後的軟體IRQ number。兩者不具有線性關系。
關於中斷號的疑問:
Linux上的網口eth0、eth1的順序,似乎是按照phy地址從小到大來排布的。
Xilinx xapp1082-zynq-eth.pdf (v5.0) July 16, 2018
https://www.xilinx.com/support/documentation/application_notes/xapp1082-zynq-eth.pdf
Xilinx Wiki - Zynq PL Ethernet:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841633/Zynq+PL+Ethernet
Xilinx Wiki - Linux Drivers:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841873/Linux+Drivers
Xilinx Wiki - Linux Drivers - Macb Driver:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver
Xilinx Wiki - Zynq Ethernet Performance:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841743/Zynq+Ethernet+Performance
查到關於Jumbo frame MTU的定義,當前值為9000,可否改大一些?
驅動源碼里關於jumbo frame的說明:
設置MTU為9000,發現ping包最大長度只能設為ping 192.168.1.10 -s 1472
https://lore.kernel.org/patchwork/patch/939535/
【完】
『拾』 求《Linux學習筆記》全文免費下載百度網盤資源,謝謝~
《Linux學習筆記》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/14_AW0VF1GI49o30HmBdnzA
簡介:Linux就是一個操作系統,它可以管理整個計算機硬體,並且可以接收我們的指令,來指揮硬體完成相應的任務,並把結果反饋給我們,小編今天給大家帶來的是Linux學習筆記完整版的內容,想要學習linux的朋友們千萬不要錯過啦