linuxins
『壹』 linux驅動開發insmod hello.ko失敗
你好,記得當初也被這個問題困惑了,kernel mole 的insmod 的時候是需要版本驗證的(也可以使用方法繞過版本驗證)。你可以看看他到底是怎麼個版本驗證法,加深你的學習。
現在看看你的問題,你下載的kerne 是2.30.4的,在make的時候kernel_dir 指定也是這個。那編譯出來的mole 肯定也是也是2.30.4的版本了,然後你想把這個mole insmod 到的你pc linux 系統,那就肯定不行了。
1. 你可以用的linux系統內核來編譯你的hello 模塊。
2. 先寫個makefile:
obj-m:= hello.o
3. 然後 make -C /lib/moles/$(shell uname -r )/build M=`pwd` moles
4.編譯好了再insmode. 就能成功了。但是還要看的printk 的等級了,可能你還需要dmesg才能看道你的模塊的操作
5. 然後你可以把上面的過程集成道一個makefile里,直接在當前目錄make 就好了。
提醒下,假如你是用自己的系統作這些實驗,要當心點,有的mole可能會讓你的系統出現oops。
所以建議你安裝個虛擬機玩,或者真正要學的話,直接買個板子最好了。
最後看你下載了linux 2.30.4?是不是應該是2.6.30.4? 然後你的開發板是也是這個kernel?假如你是用板子,你現在可以把剛編好的模塊,push 到板子,在insmod就好了。
『貳』 Linux 史上最全命令大全
1、ls命令
cd /root
ls #顯示當前目錄下所有的非隱藏文件
ls -a #顯示當前目錄下所有文件,包含隱藏文件
ls -l #顯示當前目錄下所有的非隱藏文件的詳情
ls -al #顯示當前目錄下所有文件,包含隱藏文件 的詳情
ls -lh #以列表形式顯示當前目錄下所有的非隱藏文件的大小(K M T)
ls -alh #以列表形式顯示所有文件,包含隱藏文件的文件大小(K M T)
常用的組合:
ls
ll #等價於 ls -l
ls /etc #顯示/etc目錄下的文件
2:pwd命令
用來顯示當前所在的路徑
絕對路徑: 從/目錄開始的路徑
/root
/etc/sysconf
/opt/server/data-integration/libswt/win64
相對路徑: 相對當前的路徑
3、mkdir命令
cd /root
mkdir mytest #在當前目錄創建文件夾
mkdir -p 111/222/333 #一次創建多級文件夾
mkdir /root/mydemo #使用絕對路徑來創建
mkdir mydemo2 #使用相對對路徑來創建
4、rm命令
這個命令既可以刪除文件,也可以刪除目錄
刪文件:
cd /root
rm a.txt #刪除時,會給出提醒確認,輸入y刪除,n不刪除
rm -f b.txt #強制刪除 等價於 rm -f /root/b.txt
rm ../dir2/b.txt
touch a.java b.java c.java
rm a.java b.java c.java #一次可以刪除多個文件
rm *.java -fr #可以刪除當前目錄下的所有.java文件
cd dir
rm * -fr #刪除當前目錄的所有內容
刪目錄:
rm -r 111 #刪除目錄,依次提醒刪除
rm -rf mytest #強制刪除 等價於 rm mytest -fr
常用組合:
rm -fr 文件或目錄
5、cd命令
cd 命令可以進入一個目錄,類似於對windows上的文件夾進行雙擊
cd #直接cd 可以從任何一個目錄回到/root目錄
cd /root #進入root目錄
cd /opt/server/data-integration/system/
cd .. #回到上一級目錄
cd ../.. #回到上上一級目錄
cd - #可以在最近的兩次目錄之間切換
cd /root
mdkir dir1 dir2
cd dir1
cd ../dir2 #使用相對路徑 /中國/廣東省/深圳市/寶安區/留仙二路/78號
6、歷史命令和table補全
使用上下方向鍵可以找出歷史命令
table鍵:
cd /opt/ #兩次table可以列出/opt目錄下所有的文件和子目錄
cd /opt/s #一次table可以自動補全目錄內容,前提是/opt目錄下只有一個s開頭的目錄
7、touch命令
cd /root
touch a.java #在當前目錄創建a.txt文件
touch b.java c.java #創建多個文件
touch /root/d.java #通過絕對路徑創建
8、mv命令
移動:
1、mv 文件 目錄 #將文件移動到目錄中區
cd /root/dir1
touch a.txt
mv a.txt /root/dir2 #等價於 mv a.txt ../dir2
2、 mv 目錄1 目錄2 #將目錄1移動到目錄2下面(前提是目錄2必須存在)
cd /root
mv dir2 dir1 #將dir2移動到dir1下面
重命名:
1、mv 文件1 文件2 #給文件重命名(文件2不能存在)
cd /root
mv a.txt aaa.txt #將a.txt 重命名為aaa.txt
2、mv 目錄1 目錄2 #給目錄重命名(目錄2不能存在)
cd /root
mv dir1 dirx #將dir1重命名為dirx
9、cat命令
顯示文件內容
cd /root
cat user.txt
10、cp命令
復制文件
cd /root
cp user.txt user2.txt
cp user.txt /opt/ #將當前目錄的user.txt 復制到/opt目錄,文件名保持不變
cp user.txt /opt.user2.txt #將當前目錄的user.txt 復制到/opt目錄,文件名改為user2.txt
cp /opt/server/data-integration/pan.sh ./ #將指定目錄里的文件復制到當前目錄(.後邊的/可以去掉)
cp /opt/server/data-integration/pan.sh ./dirx #將指定目錄里的文件復制到當前目錄下的dirx目錄(.後邊的/比可以去掉)
cp /opt/server/data-integration/pan.sh /root/dirx #作用同上
11、解壓和壓縮
Linux的壓縮包後綴一般是: .tar.gz
解壓:
.tar.gz
將snappy-1.1.1.tar.gz上傳到/root/dir1目錄
tar -zxvf snappy-1.1.1.tar.gz #默認解壓到當前目錄
tar -xvf snappy-1.1.1.tar.gz #默認解壓到當前目錄
tar -xvf snappy-1.1.1.tar.gz -C /opt #將壓縮包解壓到/opt目錄
.zip格式
unzip mysql-connector-java-8.0.13.zip #默認解壓到當前目錄
unzip -d /opt mysql-connector-java-8.0.13.zip #解壓到指定目錄
壓縮:
.tar.gz
tar -czvf snappy-1.1.1.tar.gz snappy-1.1.1 #將snappy-1.1.1文件夾進行打包壓縮
tar -czvf /root/dir/snappy-1.1.1.tar.gz /opt/server/snappy-1.1.1
.zip格式
zip -r mysql-connector-java-8.0.13.zip mysql-connector-java-8.0.13/
12、find命令
用來實現文件的查找
find / -name 'a.txt' #從/目錄開始查找a.txt文件
find / -name 'ins*' #從/目錄開始查找以ins開頭的文件
find / -type f -size +100M #查找/目錄下文件大小大於100M的文件
13、grep命令
grep lang anaconda-ks.cfg #從anaconda-ks.cfg文件中查找包含lang的內容
14、ps命令
ps #查看依賴終端的進程
ps -ef #查看Linux系統中所有的進程
15、kill命令
kill -9 進程的pid #每次啟動進程時,pid會發生變化,但是進程運行期間pid不會變化
16、管道 |
管道就是把前邊命令的結果作為後邊命令的輸入
ps -ef | grep mysql #查找和mysql相關的進程
ll /etc | grep java #在/etc目錄中查找java相關的文件
17、用戶的操作
用戶創建和密碼設置
useradd itheima #創建新用戶itheima
passwd itheima #設置用戶itheima密碼
用戶刪除
userdel -r itheima #刪除用戶itheima
18、文件的許可權
所屬用戶: root 文件的創建者
所屬用戶組: root 和文件創建者在一個組的用戶
其他用戶: itcast 既不是文件創建者,也和文件創建者不在同一組
r: 可讀
w:可寫
x: 可執行
chmod命令:
方式1:
chmod u+rw a.txt #在所屬用戶之前的許可權基礎上添加可讀和可寫許可權
chmod u=rw a.txt #將所屬用戶的許可權直接修改為可讀,可寫
chmod +x #給所屬用戶,所屬用戶組和其他用戶全部加上可執行許可權
方式2:
chmod 777 a.txt #給所有用戶加上所有許可權
19、clear命令
用來清屏
快捷鍵: ctrl + l
20、history命令
用來查看所有的歷史命令
21:vi編輯器的使用
vi a.txt #打開a.txt文件
vim a.txt #vim是vi的增強
22、網路管理命令
hostname :查看主機名
修改主機名: /etc/hostname
ifconfig :查看ip地址
修改ip地址: /etc/sysconfig/network-scripts/ifcfg-ens33
服務問題:
service network restart
『叄』 Linux終端命令快捷鍵
Linux終端命令快捷鍵匯總
相信很多Linux桌面用戶都對使用Linux終端感到反感,其實它沒大家想的那麼復雜,很多常見操作都可以直接在終端中進行。特為大家匯總了提升終端命令執行效率的快捷操作,希望能幫助你學習和提升效率。
移動定位游標
在終端中移動游標和定位似乎非常不便,其實不是你想的那樣,有很多種方式可以讓鍵盤成為你的好朋友,只是需要掌握正確的方法而已。
定位單詞
在長段的命令中,使用 Ctrl + ← 和 Ctrl + → 可快速將游標定位到命令中單詞的首字母或末尾,實現在各單詞之間的快速跳動定位。
你可以試著在終端中輸入 apt-get install build-essential 命令後,按 Ctrl+ 左鍵或 Ctrl + 右鍵來試試效果。
定位行首和行尾
定位到命令行首可以使用 Ctrl + A,行尾則使用 Ctrl + E 快捷鍵。
清除部分、全部或整行
使用 Ctrl + K 快捷鍵可以將當前游標位置之後的所有部分快速清除,Ctrl + W 可以清除當前游標位置之前的一個單詞,而 Ctrl + U 則可以直接剛整行命令直接清除。
自動補全命令或路徑
tab 鍵可以直接補全命令和路徑,讓我們免去很多輸入錯誤的可能。當然,在命令記不全時,只需輸入幾個首字母即可用 tab 鍵來補,還是十分方便的'。
例如:要在 Ubuntu 安裝軟體,只需輸入 apt-get ins 按 tab 之後即可被補全成 apt-get install。
切換最近使用的命令
在Linux 的終端歷史記錄中會記下用戶執行過的命令,用戶只需按鍵盤的 ↓、↑ 上下箭頭即可快速切換執行過的命令。
復制前行
!! 雙驚嘆號直接表示上一行命令,例如要用 sudo 重復執行上一條命令,無需再輸一遍,只需執行如下命令即可:
1. sudo !!
執行指定歷史命令
若你想重復執行的命令不是「上一條」,則不能再使用 !! 了。此時使用 ! 跟上要重復執行的前述命令開頭即可。
復制前一個參數
將文件夾復制並粘貼到新路徑後,你可能還要在目錄中進行其它操作,此時可以這樣切換:
1. cd !$
其中的 !$ 表示上次使用的參數,通常只用於目錄。
目錄導航
在Linux 終端中進行目錄導航和切換還是使用 cd 命令,下面介紹一些 cd命令的常見操作。
導航到特殊文件夾
在Linux 中操作文件夾時輸入路徑就是一個苦差事,但若你是通過桌面登錄系統的話,可以直接將要指定的文件夾拖入終端窗口,而不必手動輸入路徑。
回到上級目錄
與Windows 一樣,使用 cd.. 即可。如果要在父目錄的各文件夾之間進行切換,使用 ../文件夾名即可。
回到上個目錄
如果你操作到一半時,需要返回上個進入過的目錄,可以使用 – 破折號:
1. cd -
其它目錄導航操作
cd 返回家目錄
pwd 查看當前目錄
cd / 回到根目錄(需要有許可權)
多任務
執行多條命令
要在 Linux 終端中同時執行多個任務,只需用 && 符號將多條命令串連起來即可,例如:
1. apt-get update && apt-get upgrade
命令失敗備用
&& 只會在前面一條命令執行成功時才會繼續執行後續命令,如果你想在首條命令執行失敗時提供備用命令,只需將&& 替換為 || 即可。
後台執行任務
在任意 Linux 命令最後加上 &符號即可將此任務丟到後台去執行,比較適合運行時間較長的任務。對於後台執行的任務可以使用jobs 命令進行顯示查看,也可以用 kill 將其幹掉或用fg 命令將其挪到前台.
;『肆』 linux怎麼導出內核中的文件
linux內核之模塊參數及導出符號
1. 模塊參數
用 「mole_param (參數名,參數類型,參數讀 / 寫許可權) 」 為模塊定義一個參數,例如下列代碼定義了 1 個整型參數和 1 個字元指針參數:
1 static char *book_name = "dissecting Linux Device Driver";
2 mole_param(book_name, charp, S_IRUGO);
3 static int book_num = 4000;
4 mole_param(book_num, int, S_IRUGO);
在裝載內核模塊時,用戶可以向模塊傳遞參數,形式為 「insmode 模塊名 參數名 = 參數值,如果不傳遞,參數將使用模塊內定義的預設值。參數類型可以是 byte 、 short 、 ushort 、 int 、 uint 、 long 、 ulong 、 charp (字元指針)、 bool 或 invbool (布爾的反),在模塊被編譯時會將 mole_param 中聲明的類型與變數定義的類型進行比較,判斷是否一致。模塊被載入後,在 /sys/mole/ 目錄下將出現以此模塊名命名的目錄。在此模塊的目錄下還將出現 parameters 目錄,其中包含一系列以參數名命名的文件節點,這些文件的許可權值就是傳入mole_param ()的 「參數讀 / 寫許可權」 ,而文件的內容為參數的值。
insmod命令載入模塊後,通過查看 「/var/log/messages」 日誌文件可以看到內核的輸出:
# tail -n 2 /var/log/messages
tail -n 2表示輸入文件的最後2行
2. 導出符號
Linux 的 「/proc/kallsyms」 文件對應著內核符號表,它記錄了符號以及符號所在的內存地址。模塊可以使用如下宏導出符號到內核符號表中:
EXPORT_SYMBOL( 符號名 );
EXPORT_SYMBOL_GPL( 符號名 );
導出的符號可以被其他模塊使用,只需使用前聲明一下即可。 EXPORT_SYMBOL_GPL ()只適用於包含 GPL許可權的模塊。
如果符號名是「e_symbol」,從 「/proc/kallsyms」 文件中找出 e_symbol 的相關信息:
# grep e_symbol /proc/kallsyms
8000af1c t e_symbol [export_symb]