導航:首頁 > 源碼編譯 > 海思編譯驅動模塊

海思編譯驅動模塊

發布時間:2022-07-04 10:53:28

① 如何把自己的驅動編譯進內核或模塊

我們知道若要給linux內核添加模塊(驅動)有如下兩種方式:
(1)動態方式:採用insmod命令來給運行中的linux載入模塊。
(2)靜態方式:修改linux的配置菜單,添加模塊相關文件到源碼對應目錄,然後把模塊直接編譯進內核。
對於動態方式,比較簡單,下面我們介紹如何採用靜態的方式把模塊添加到內核。
最終到達的效果是:在內核的配置菜單中可以配置我們添加的模塊,並可以對我們添加的模塊進行編譯。
一. 內核的配置系統組成
首先我們要了解Linux 2.6內核的配置系統的原理,比如我們在源碼下運行「make menuconfig 」為神馬會出現一個圖形配置菜單,配置了這個菜單後又是如何改變了內核的編譯策略滴。
內核的配置系統一般由以下幾部分組成:
(1)Makefile:分布在Linux內核源代碼中的Makefile,定義Linux內核的編譯規則。
(2)配置文件(Kconfig):給用戶提供配置選項,修改該文件來改變配置菜單選項。
(3)配置工具:包括配置命令解釋器(對配置腳本中使用的配置命令進行解釋),配置用戶界面(提供字元界面和圖形界面)。這些配置工具都是使用腳本語言編寫的,如Tcl/TK、Perl等。
其原理可以簡述如下:這里有兩條主線,一條為配置線索,一條為編譯線索。配置工具根據kconfig配置腳本產生配置菜單,然後根據配置菜單的配置情況生成頂層目錄下的.config,在.config里定義了配置選擇的配置宏定義,如下所示:

如上所示,這里定義的這些配置宏變數會在Makefile里出現,如下所示:

然後make 工具根據Makefile里這些宏的賦值情況來指導編譯。所以理論上,我們可以直接修改.config和Makefile來添加模塊,但這樣很麻煩,也容易出錯,下面我們將會看到,實際上我們有兩種方法來很容易的實現。

二. 如何添加模塊到內核
實際上,我們需要做的工作可簡述如下:
(1)將編寫的模塊或驅動源代碼(比如是XXOO)復制到Linux內核源代碼的相應目錄。
(2)在該目錄下的Kconfig文件中依葫蘆畫瓢的添加XXOO配置選項。
(3)在該目錄的Makefile文件中依葫蘆畫瓢的添加XXOO編譯選項。
可以看到,我們奉行的原則是「依葫蘆畫瓢」,主要是添加。
一般的按照上面方式又可出現兩種情況,一種為給XXOO驅動添加我們自己的目錄,一種是不添加目錄。兩種情況的處理方式有點兒不一樣哦。

三. 不加自己目錄的情況
(1)把我們的驅動源文件(xxoo.c)放到對應目錄下,具體放到哪裡需要根據驅動的類型和特點。這里假設我們放到./driver/char下。
(2)然後我們修改./driver/char下的Kconfig文件,依葫蘆添加即可,如下所示:

注意這里的LT_XXOO這個名字可以隨便寫,但需要保持這個格式,他並不需要跟驅動源文件保持一致,但最好保持一致,等下我們在修改Makefile時會用到這個名字,他將會變成CONFIG_LT_XXOO,那個名字必須與這個名字對應。如上所示,tristate定義了這個配置選項的可選項有幾個,help定義了這個配置選項的幫助信息,具體更多的規則這里不講了。

(3)然後我們修改./driver/char下的Makefile文件,如下所示:

這里我們可以看到,前面Kconfig里出現的LT_XXOO,在這里我們就需要使用到CONFIG_XXOO,實際上邏輯是醬汁滴:在Kconfig里定義了LT_XXOO,然後配置完成後,在頂層的.config里會產生CONFIG_XXOO,然後這里我們使用這個變數。
到這里第一種情況下的添加方式就完成了。
四. 添加自己目錄的情況
(1)在源碼的對應目錄下建立自己的目錄(xxoo),這里假設為/drivers/char/xxoo 。
(2) 把驅動源碼放到新建的xxoo目錄下,並在此目錄下新建Kconfig和Makefile文件。然後給新建的Kconfig和Makefile添加內容。
Kconfig下添加的內容如下:

這個格式跟之前在Kconfig里添加選項類似。
Makefile里寫入的內容就更少了:

添加這一句就可以了。
(3)第三也不復雜,還是依葫蘆畫瓢就可以了。
我們在/drivers/char目錄下添加了xxoo目錄,我們總得在這個配置系統里進行登記吧,哈哈,不然配置系統怎麼找到們呢。由於整個配置系統是遞歸調用滴,所以我們需要在xxoo的父目錄也即char目錄的Kconfig和Makefile文件里進行登記。具體如下:
a). 在drivers/char/Kconfig中加入:source 「drivers/char/xxoo/Kconfig」
b). 在drivers/char/Makefile中加入:obj-$(CONFIG_LT_XXOO) += xxoo/
添加過程依葫蘆畫瓢就可以了,灰常滴簡單。

② 如何編譯載入linux驅動和內核模塊

linux下編譯運行驅動
嵌入式linux下設備驅動的運行和linux x86 pc下運行設備驅動是類似的,由於手頭沒有嵌入式linux設備,先在vmware上的linux上學習驅動開發。
按照如下方法就可以成功編譯出hello world模塊驅動。
1、首先確定本機linux版本
怎麼查看Linux的內核kernel版本?
'uname'是Linux/unix系統中用來查看系統信息的命令,適用於所有Linux發行版。配合使用'uname'參數可以查看當前伺服器內核運行的各個狀態。
#uname -a
Linux whh 3.5.0-19-generic #30-Ubuntu SMPTue Nov 13 17:49:53 UTC 2012 i686 i686 i686 GNU/Linux

只列印內核版本,以及主要和次要版本:
#uname -r
3.5.0-19-generic

要列印系統的體系架構類型,即的機器是32位還是64位,使用:
#uname -p
i686

/proc/version 文件也包含系統內核信息:
# cat /proc/version
Linux version 3.5.0-19-generic(buildd@aatxe) (gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) ) #30-UbuntuSMP Tue Nov 13 17:49:53 UTC 2012

發現自己的機器linux版本是:3.5.0-19-generic
2、下載機器內核對應linux源碼

③ 如何編譯一個linux下的驅動模塊

按照《linux設備驅動開發詳解》一書中的步驟實現經典例子"hello,world!"的例子。
具體步驟如下:
=============================================
1.源碼如下:
/*
* hello.c -- the example of printf "hello world!" in the screen of driver program
*/
#include <linux/init.h>
#include <linux/mole.h>
MODULE_LICENSE("Dual BSD/GPL");/* declare the license of the mole ,it is necessary */
static int hello_init(void)
{
printk(KERN_ALERT "Hello World enter!\n");
return 0;
}
static int hello_exit(void)
{
printk(KERN_ALERT "Hello world exit!\n");
}
mole_init(hello_init); /* load the mole */
mole_exit(hello_exit); /* unload the mole */
進入目錄:
[root@Alex_linux /]#cd /work/jiakun_test/moletest
[root@Alex_linux moletest]# vi hello.c
然後拷入上面書上的源碼。
2.編譯代碼:
1>.首先我在2.4內核的虛擬機上進行編譯,編譯過程如下:
[root@Alex_linux moletest]#gcc -D__KERNEL__ -I /usr/src/linux -DMODULE -Wall -O2 -c -o hello.o hello.c
其中-I選項指定內河源碼,也就是內核源碼樹路徑。編譯結果:
hello.c:1:22: net/sock.h: No such file or directory
hello.c: In function `hello_init':
hello.c:6: warning: implicit declaration of function `printk'
hello.c:6: `KERN_ALERT' undeclared (first use in this function)
hello.c:6: (Each undeclared identifier is reported only once
hello.c:6: for each function it appears in.)
hello.c:6: parse error before string constant
hello.c: In function `hello_exit':
hello.c:11: `KERN_ALERT' undeclared (first use in this function)
hello.c:11: parse error before string constant
hello.c: At top level:
hello.c:13: warning: type defaults to `int' in declaration of `mole_init'
hello.c:13: warning: parameter names (without types) in function declaration
hello.c:13: warning: data definition has no type or storage class
hello.c:14: warning: type defaults to `int' in declaration of `mole_exit'
hello.c:14: warning: parameter names (without types) in function declaration
hello.c:14: warning: data definition has no type or storage class
在網上查詢有網友提示沒有引入kernel.h
解決:vi hello.c
在第一行加入:#include <linux/kernel.h>
再次編譯仍然報KERN_ALERT沒有聲明
修改編譯條件-I,再次編譯:
[root@Alex_linux moletest]#gcc -D__KERNEL__ -I /usr/src/linux -DMODULE -Wall -O2 -c -o hello.o hello.c
[root@Alex_linux moletest]#ls
hello.c hello.o Makefile
[root@Alex_linux moletest]#
2>.接著我嘗試在2.6內核的虛擬機上進行編譯
編譯過程如下:
[root@JiaKun moletest]# ls
hello.c makefile
[root@JiaKun moletest]# vi hello.c
[root@JiaKun moletest]# make
make -C /mylinux/kernel/2.4.18-rmk7 M=/home/alex/test/moletest moles
make: *** /mylinux/kernel/2.4.18-rmk7: No such file or directory. Stop.
make: *** [moles] Error 2
[root@JiaKun moletest]# vi makefile
[root@JiaKun moletest]# make
make -C /usr/src/kernels/2.6.18-53.el5-i686 M=/home/alex/test/moletest moles
make[1]: Entering directory `/usr/src/kernels/2.6.18-53.el5-i686'
scripts/Makefile.build:17: /home/alex/test/moletest/Makefile: No such file or directory
make[2]: *** No rule to make target `/home/alex/test/moletest/Makefile'. Stop.
make[1]: *** [_mole_/home/alex/test/moletest] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.18-53.el5-i686'
make: *** [moles] Error 2
[root@JiaKun moletest]# mv makefile Makefile
[root@JiaKun moletest]# make
make -C /usr/src/kernels/2.6.18-53.el5-i686 M=/home/alex/test/moletest moles
make[1]: Entering directory `/usr/src/kernels/2.6.18-53.el5-i686'
CC [M] /home/alex/test/moletest/hello.o
Building moles, stage 2.
MODPOST
CC /home/alex/test/moletest/hello.mod.o
LD [M] /home/alex/test/moletest/hello.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.18-53.el5-i686'
[root@JiaKun moletest]# ls
hello.c hello.ko hello.mod.c hello.mod.o hello.o Makefile Mole.symvers

④ 嵌入式linux沒有源碼包,我該怎麼編譯驅動模塊

大部分的思路都是如上,大部分的編譯器就是特定的晶元廠商提供好的交叉編譯器,但也需要gcc編譯器來作為承載,就是說:需要移植的編譯器是在gcc的基礎上做相應添加庫,添加規則等而成,現在大部分linux發行版的kernel中90%以上代碼都是相似的,自己添加自己特有驅動等等就可以了,沒人會修改其他的代碼,也沒能力去修改。

⑤ 如何編譯linux驅動模塊

第一步:准備源代碼

首先我們還是要來編寫一個符合linux格式的模塊文件,這樣我們才能開始我們的模塊編譯。假設我們有一個源文件mymod.c。它的源碼如下:

mymoles.c
1. #include <linux/mole.h> /* 引入與模塊相關的宏 */
2. #include <linux/init.h> /* 引入mole_init() mole_exit()函數 */
3. #include <linux/moleparam.h> /* 引入mole_param() */
4
5. MODULE_AUTHOR("Yu Qiang");
6. MODULE_LICENSE("GPL");
7
8. static int nbr = 10;
9. mole_param(nbr, int, S_IRUGO);
10.
11. static int __init yuer_init(void)
12.{
13. int i;
14. for(i=0; i<nbr; i++)
15. {
16. printk(KERN_ALERT "Hello, How are you. %d/n", i);
17. }
18. return 0;
19.}
20.
21.static void __exit yuer_exit(void)
22.{
23. printk(KERN_ALERT"I come from yuer's mole, I have been unlad./n");
24.}
25.
26. mole_init(yuer_init);
27. mole_exit(yuer_exit);

我們的源文件就准備的差不多了,這就是一個linux下的模塊的基本結構。第9行是導出我們的符號變數nbr。這樣在你載入這個模塊的時候可以動態修改這個變數的值。稍後將演示。yuer_init()函數將在模塊載入的時候運行,通過輸出的結果可以看到我們的模塊是否載入成功。

第二步:編寫Makefile文件

首先還是來看看我們Makefile的源文件,然後我們再來解釋;

Makefile
obj-m := moles.o #要生成的模塊名
moles-objs:= mymod.o #生成這個模塊名所需要的目標文件

KDIR := /lib/moles/`uname -r`/build
PWD := $(shell pwd)

default:
make -C $(KDIR) M=$(PWD) moles

clean:
rm -rf *.o .* .cmd *.ko *.mod.c .tmp_versions

ARM平台
Makefile

obj-m += mymod.o
KDIR := /home/workspace2/kernel/linux-2.6.25 #如果是用於arm平台,則內核路徑為arm內核的路徑
PWD = $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) moles
clean:
rm -rf *.o

在arm板上插入是
insmod mymod
如果出現以下錯誤
insmod: chdir(/lib/moles): No such file or directory
則運行
mkdir /lib/moles/2.6.25 (與arm內核版本相同)
並將mymod.ko文件復制到該目錄下
cp mymod.ko /lib/moles/2.6.25
然後再執行 (insmod 只在/lib/moles/2.6.25目錄下查找相關驅動模塊)
insmod mymod

現在我來說明一下這個Makefile。請記住是大寫的Makefile而不是小寫的makefile;
obj-m :這個變數是指定你要聲稱哪些模塊模塊的格式為 obj-m := <模塊名>.o
moles-objs :這個變數是說明聲稱模塊moles需要的目標文件 格式要求 <模塊名>-objs := <目標文件>
切記:模塊的名字不能取與目標文件相同的名字。如在這里模塊名不能取成 mymod;
KDIR :這是我們正在運行的操作系統內核編譯目錄。也就是編譯模塊需要的環境
M= :指定我們源文件的位置
PWD :這是當前工作路徑$(shell )是make的一個內置函數。用來執行shell命令。

第三步:編譯模塊

現在我們已經准備好了我們所需要的源文件和相應的Makefile。我們現在就可以編譯了。在終端進入源文件目錄輸入make
運行結果:
make[1]: Entering directory `/usr/src/linux-headers-2.6.24-24-generic'
CC [M] /home/yuqiang/桌面/mymole/mymoles.o
LD [M] /home/yuqiang/桌面/mymole/moles.o
Building moles, stage 2.
MODPOST 1 moles
CC /home/yuqiang/桌面/mymole/moles.mod.o
LD [M] /home/yuqiang/桌面/mymole/moles.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-24-generic'

第四步:載入/卸載我們的模塊

從上面的編譯中我可以看到。已經有一個moles.ko生成了。這就是我們的模塊了。現在我們就可以來載入了。
首先在終端輸入:sudo insmod moles.ko
現在我們來看看我們的模塊載入成功沒有呢?
在終端輸入:dmesg | tail -12 這是查看內核輸出信息的意思。tail -12 顯示最後12條;
顯示結果如下:
[17945.024417] sd 9:0:0:0: Attached scsi generic sg2 type 0
[18046.790019] usb 5-8: USB disconnect, address 9
[19934.224812] Hello, How are you. 0
[19934.224817] Hello, How are you. 1
[19934.224818] Hello, How are you. 2
[19934.224820] Hello, How are you. 3
[19934.224821] Hello, How are you. 4
[19934.224822] Hello, How are you. 5
[19934.224824] Hello, How are you. 6
[19934.224825] Hello, How are you. 7
[19934.224826] Hello, How are you. 8
[19934.224828] Hello, How are you. 9

看到了吧。我們的模塊的初始化函數yuer_init();已經成功運行了。說明我們的模塊已經載入成功;
現在我們再來卸載模塊試試看。
在終端輸入:sudo rmmod moles
在終端輸入:dmesg | tail -3
[19934.224826] Hello, How are you. 8
[19934.224828] Hello, How are you. 9
[20412.046932] I come from yuer's mole, I have been unlad.

可以從列印的信息中看到,我們的模塊的退出函數已經被執行了。說明我們的模塊已經被成功的卸載了。到目前位置我們就已經算是對模塊的編譯到編譯運行算是有了一個整體上的認識了。對於以後深入的學習還是應該有點幫助的。下面我們將在看看於模塊相關的一些簡單的操作。

第五步:載入模塊時傳遞參數
在終端輸入:sudo insmod mole_name.ko nbr=4
在終端輸入:dmesg | tail -6
顯示結果如下:
[20800.655694] Hello, How are you. 9
[21318.675593] I come from onefile mole, I have been unlad.
[21334.425373] Hello, How are you. 0
[21334.425378] Hello, How are you. 1
[21334.425380] Hello, How are you. 2
[21334.425381] Hello, How are you. 3

這樣我們就可以看到在模塊載入的時候動態設置了我們的一個變數。初始化函數中的循環只執行了4次。
可能你會問我怎麼知道一個模塊可以設置那些變數呢。當然,你可以先不設變數載入一次。然後可以在終端輸入ls /sys/mole/<moles_name>/parameters/來查看。在這里我們是這樣輸入的
在終端輸入:ls /sys/moedle/moles/parameters/
顯示結果:
nbr

如果我們的模塊載入成功了。最後我們還可以通過modinfo來查看我們的模塊信息。如下
在終端輸入:sudo modinfo moles.ko
顯示結果:
filename: moles.ko
license: GPL
author: Yu Qiang
srcversion: 20E9C3C4E02D130E6E92533
depends:
vermagic: 2.6.24-24-generic SMP mod_unload 586
parm: nbr:int

⑥ 請教下,編譯驅動模塊出現的警告

先把你的mole裡面全部東西都去掉,只留下空的mole_init和mole_exit和MODULE信息的那幾個宏,看看能不能編譯過去。不行的話就是你頭文件裡面有問題了。

⑦ 海思的音頻 怎麼跟alsa 或者oss 這種音頻編程銜接

在音效卡的驅動中一種是OSS(開放聲音系統),一種是ALSA(先進Linux聲音架構)。OSS是一個商業音效卡驅動程序,需要花錢購買。一般我們現在使用的是ALSA的聲音架構。
Advanced Linux Sound Architecture 的簡稱為 ALSA,譯成中文的意思是 Linux 高級聲音體系,ALSA不僅僅是包括對音效卡的支持和驅動;
它的特徵如下:
1、對所有音頻介面的高效支持,從普通用戶的音效卡到專業級別多路音頻設備;
2、音效卡驅動完全模塊化設計;
3、SMP and thread-safe design.
4、開發庫(alsa-lib) 為程序設計提供了簡單、方便,並且擁有有高級的效果和功能;
5、支持舊版本的OSS API 結口,能為大多數的OSS應用程序提供兼容;OSS是一個商業性的驅動,OSS有一個簡裝本的代碼已經移入內核和ALSA,其中alsa-oss就是;OSS公司據說目前已經並不存在了;我們沒有必要用OSS 公司提供的商業版本;用ALSA和OSS簡裝版足夠;
如何查看硬體晶元;
在Linux操作系統中,所有的硬體都是以晶元組來區分的,品牌並不是最重要的;硬體最重要的標識是晶元組;所以您在討論區求助的時候,只說硬體品牌,而不提供晶元組,大家是幫助不了您的,切記;
我們查看硬體的晶元組是的命令是 lspci -v 或者是dmesg,由於dmesg輸出的信息不太多,不夠直觀;所以經常用的還是lspci -v ;也可以用lshal 獲取;最方便的還是lspci -v;初學者還是用 lspci -v 更好一點;
代碼:
[root@localhost beinan]# lspci -v
我們運行lspci -v 後,如果查看音效卡晶元組,發會現有類似下面的一段;
[root@localhost beinan]# lspci -v
Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M)
AC'97 Audio Controller (rev 03)
Subsystem: Hewlett-Packard Company: Unknown device 3080
2.6.11-1.1369_FC4 i686 i686 i386
上面的表示的是系統的內核版本,處理器架構等;lsmod 查看已經載入的內核模塊;
如果一個設備在內核的編譯中是以模塊方式載入的,主要是通過lsmod 來查看;
[root@localhost beinan]# lsmod
可能初學Linux的弟兄會問,內核的mole存放在哪裡,我們能不能自己來手工載入模塊;內核的模塊放在 /lib/moles/內核的版本/kernel/ ,比如在Fedora 4.0 中,我們可以看到如下的:
[root@localhost beinan]# ls /lib/moles/2.6.11-1.1369_FC4/kernel/
arch/crypto/drivers/ fs/lib/ net/ sound/其中,sound 就是音效卡模塊存放目錄,大多數的硬體驅動放在 drivers目錄,fs 是文件系統模塊的目錄;net是與網路有關的存放目錄,比如一些網路協議支持的模塊、防火牆支持的模塊等;arch 是cpu方面 ... ...
如果我們想自己載入模塊,就到這些目錄中查看相應模塊的信息,然後用 modprobe 來載入;
[root@localhost beinan]# modinfo snd-intel8x0
查看一個模塊的信息,我們用 modinfo 來查看,所要查看的模塊不要帶 .ko 或者.o 之類的;比如查看到類似下面的信息;
description: Intel 82801AA,82901AB,i810,i820,i830,i840,i845,MX440; SiS 7012; Ali 5455
通過這個我們足可以知道這是Intel 集成音效卡,通過lspci -v 得到的音效卡信息,感覺他們很相近;所以就能嘗試用這個模塊來驅動;
[root@localhost beinan]# modprobe snd-intel8x0
用 modprobe 載入了模塊,然後我們通過 lsmod 就能看到了;對於音效卡模塊是這么載入的,其它設備的驅動模塊也是如此。

⑧ linux內核怎麼單獨編譯驅動模塊

你可能需要手動創建設備節點,首先cat /proc/device 看看能否找到video的設備號,再用mknod命令創建/dev/下的設備節點,如果沒有再考慮去內核make menuconfig查看相關驅動選項有沒有勾上。

⑨ 海思hi3520編譯x264庫嗎

剛到手的Hi3520開發板,拿來第一件事當然是搭環境,本來調了那麼多板子,這不是小菜一碟嘛,可就是掛NFS還浪費了快一個小時,郁悶的了,這倒也好,順著Hi3520的脈絡,就把這個環境搭建過程記錄一下,權當記個筆記噻。。。
買的是雅儀科技的Hi3520開發板,板子還是蠻好看滴,6800大洋。因為最多要驅動八塊sata硬碟,所以板子採用的是計算機的ATX電源。拿過來之後立馬接上串口,上電,擦,毫無反應,這是神馬情況,打電話一問才知道板子本身接出來的串口不是調試串口,UART0要我自己做根線接出來,我勒個去。。。
然後開始掛NFS,本來很簡單的一件事兒,可就因為公司的網路折騰了我好一會兒,我自己習慣用ubuntu,可ubuntu嚴重依賴網路啊,公司的網路受限,我執行sudo apt-getinstall nfs-kernel-server丫根本不能裝,么有辦法了,只能曲線救國,換成Fedora,這下能搞的吧。
這里把ubuntu和Fedora下NFS掛載的基本步驟說明下,後面再說明下要注意的問題:
先說ubuntu下面的:
1、安裝nfs服務
執行命令:sudo apt-get install nfs-kernel-server
安裝nfs-kernel-server時會自動安裝nfs-common和portmap
2、修改/etc/exports文件
執行命令:vim /etc/exports
一般剛安裝的nfs-kernel-server服務則這個文件內容應該為空,在文件中加上下面一行
/root/Hi3520192.168.1.244(rw,sync,no_root_squash)
這里的/root/Hi3520表示你linux主機上的共享目錄,IP地址你可以改為你開發板的IP,後面的參數網上說的已經很多了,不必過多說明
3、設置linux主機的IP地址,這個不用多說了哎
4、重啟nfs服務
執行命令:
sudo/etc/init.d/portmap restart
sudo/etc/init.d/nfs-kernel-server restart

再說Fedora下面的:
Fedora下面稍微復雜,但是Fedora的NFS服務在安裝系統的時候已經存在,我們只需配置並將其開啟
1、開啟nfs服務
在終端下輸入setup,在彈出的菜單中選擇「系統服務」,講其中的netconsole,netplugd,nfs服務選上(按空格鍵選擇或者取消)。並按TAB鍵確認退出
在終端中輸入service nfs restart重啟nfs服務
2、修改/etc/exports文件
此處同ubuntu中的操作
3、設置linux主機端的網路
這里就不僅僅是設置IP了,還要設置下網路
在虛擬機(我這里用的是VMware)菜單中依次選擇」edit->virtual networksetting->Host virtual network mapping」,在第一個下拉菜單中選擇一個已經存在的網卡,就是你PC上真實的網卡,並按「應用」,「確認」
關閉虛擬機,確認Network connection為bridged模式

上面是linux主機端的一些設置,下面說點需要注意的問題,因為我們很多人掛NFS的時候是將PC機和開發板用一根網線直接連接,這個時候IP地址你可以隨便設,但是這樣的話在開發的時候就不能上網了,所以很多人利用一個小humble將PC機和開發板同時接入區域網中,這個時候設置IP的時候您就不要昏頭了啊,一定要先確認這個IP是能用的哎,還有就是虛擬機的network connection要選橋接呀。

再說下Hi3520開發板的設置吧,我看很多開發板是通過在uboot中設置bootargs讓linux啟動的時候就直接掛載NFS,而海思的板子都是在板子進入linux之後通過執行腳本來掛載NFS的,個人覺得後者比較靈活,我想掛就掛,前者就略顯麻煩了哎
海思的文檔裡面信誓當當的把腳本寫好啦
modprobe mmzmmz=ddr,0,0xC2000000,16M /*插入mmz模塊,網口驅動會使用該模塊*/
modprobe hiether /*插入網口驅動模塊*/
ifconfig eth0 hw ether00:10:85:18:01:84 /*配置MAC地址*/
ifconfig eth010.85.180.184 netmask 255.255.254.0 /*配置IP地址和子網掩碼*/
route add default gw10.85.180.1 /*配置默認網關*/
modprobe nfs /*插入NFS模塊*/
mount -t nfs -o nolock10.85.180.133:/home/c54122/glibc-nfs /mnt
和3515的文檔上一模一樣,可是你丫網卡驅動有變化呀,不負責任哎,改了連文檔也不更新,而且我這板子上用的是千兆網卡,還得設置一下模式,我擦,貼上我的腳本內容,IP地址和主機端的NFS目錄根據情況自己改呀
modprobemmz mmz=ddr,0,0xC2000000,16M
modprobeh2gether port_mode=1
ifconfigeth0 hw ether DC:07:C1:FE:26:D3
ifconfigeth0 192.168.1.244 netmask 255.255.255.0
routeadd default gw 192.168.1.1
modprobenfs
mount-t nfs -o nolock 192.168.1.233:/root/Hi3520 /mnt
執行這個腳本,NFS就掛載上啦,然後可以開發嘍

最後還有一個問題注意下,ubuntu下安裝3520的SDK時,可能很多人會報錯,那是ubuntu將默認的shell改成了dash,改回去就是了呀,執行命令sudo dpkg-reconfigure dash,然後選擇「否」,over!

⑩ make moles編譯驅動模塊,只生成.o文件沒有.ko文件...這是怎麼回事

file1.o和file2.o指的是編譯出來的源文件有兩個分別是file1.c和file2.c

閱讀全文

與海思編譯驅動模塊相關的資料

熱點內容
linux管道用法 瀏覽:803
python隨機數怎麼引用 瀏覽:880
不停解壓的游戲 瀏覽:703
管理員排除故障命令 瀏覽:921
安卓陀螺儀怎麼關 瀏覽:65
微信伺服器的ip地址段 瀏覽:641
天龍外傳什麼app可以看 瀏覽:377
旭日神體重秤用什麼app 瀏覽:181
pdf英文怎麼換成中文 瀏覽:473
讓你們聽一下解壓的聲音 瀏覽:477
安卓游戲模擬器用什麼顯卡 瀏覽:207
未婚程序員換工作 瀏覽:158
壓縮空氣管道有水 瀏覽:914
河東app怎麼開發 瀏覽:492
文件夾分享到手機 瀏覽:329
如何拿出程序員的證據 瀏覽:388
聯想車載導航一體機d1如何安裝app 瀏覽:198
什麼情侶app能用騰訊視頻 瀏覽:610
抖音視頻評論加密 瀏覽:371
蘋果6上App如何轉到xr 瀏覽:375