交叉編譯可以編譯驅動模塊嗎
不需要改源碼Makefile,只要在你的驅動目錄下配置好Makefile裡面的源碼樹路徑就行了。
obj-m := led_ko.o
KDIR := /home/zs5577517/ti-ezsdk_dm816x-evm_5_03_01_15/board-support/linux-2.6.37-psp04.00.01.13.patch2
all:
make -C $(KDIR) M=$(PWD) moles ARCH=arm CROSS_COMPILE=/home/zs5577517/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-
clean:
rm -f *.ko *.o
Ⅱ 嵌入式linux沒有源碼包,我該怎麼編譯驅動模塊
大部分的思路都是如上,大部分的編譯器就是特定的晶元廠商提供好的交叉編譯器,但也需要gcc編譯器來作為承載,就是說:需要移植的編譯器是在gcc的基礎上做相應添加庫,添加規則等而成,現在大部分linux發行版的kernel中90%以上代碼都是相似的,自己添加自己特有驅動等等就可以了,沒人會修改其他的代碼,也沒能力去修改。
Ⅲ 如何編譯/交叉編譯內核模塊, Linux 2.6.
欏�build 能夠編譯內核樹目錄內的內核模塊,也能夠編譯內核樹目錄外的內核模塊(外部內核模塊)。. 編譯外部內核模塊的命令: #cd <your-mole-dir> #make -C <path-to-kernel> M=`pwd` 其中<your-mole-dir> 為要編譯的內核模塊所在目錄,<path-to-kernel> 為內核源碼所在的目錄。 對於發行版本的Linux ,可以用: #make -C /lib/moles/`uname -r`/build M=`pwd` 注意:使用Kbuild 之前,必須先成功編譯過內核源碼。 說明: .#make -C <path-to-kernel> M=`pwd` moles 作用與上面的命令一樣 .以前的內核版本可以使用 #make -C <path-to-kernel> SUBDIRS=`pwd` moles. 安裝外部內核模塊 #make -C <path-to-kernel> M=`pwd` moles_install 默認安裝目錄為:/lib/moles/`uname -r`/extra ,可以通過INSTALL_MOD_PATH 宏在默認安裝路徑前加前綴。 例如: #make -C <path-to-kernel> INSTALL_MOD_PATH=/opt M=`pwd` moles_install 則編譯後的模塊會放在/opt/lib/moles/`uname -r`/extra 通過宏INSTALL_MOD_DIR 可以修改是否放在'extra' 下,例如: #make -C <path-to-kernel> INSTALL_MOD_DIR=golf M=`pwd` moles_install 則編譯後的模塊會放在/lib/moles/`uname -r`/golf . 編譯單個文件 #make -C <path-to-kernel> M=`pwd` <filename>. 其他命令 #make -C <path-to-kernel> M=`pwd` clean #make -C <path-to-kernel> M=`pwd` help.Kbuild 文件 Linux的Kbuild 會在內核模塊目錄下查找Kbuild 文件,如果有,則在編譯時會使用該文件。示例: 假設有這么幾個文件:8123_if.c 8123_if.h 8123_pci.c 8123_bin.o_shipped( 二進制的模塊文件) Kbuild 文件的內容: obj-m := 8123.o 8123-y:8123_if.o 8123_pci.o 8123_bin.o Makefile的內容: #為了兼容舊版本的Kbuild ifneq($(KERNELRELEASE),) include Kbuildelse# 正常的Makefile KDIR:=/lib/moles/`uname -r`/buildall::$(MAKE) -C $(KDIR) M=`pwd` $@ # 其他targetgenbin:echo "X" > 8123_bin_shippedendif 注意,沒有源碼的二進制.o 文件必須以原文件名加_shipped 結尾,例如8123_bin.o_shipped,KBuild 會把8123_bin.o_shipped 復制為8123_bin.o ,然後一起編譯。 應該用: ifeq ($(obj),) obj= .
Ⅳ 弄好的內核模塊怎麼弄進開發板裡面去啊(我已經用交叉編譯器德到了.ko文件)
這些是初學者經常遇到的問題。我以前也遇到過,所以還是我來回答你吧。首先rz命令是BusyBox裡面是不帶的,如果你要用就要另外下載一個rz,然後用arm編譯之後再放到開發板/bin目錄下面。但是我不推薦用rz,速度很慢的。最方便的還是掛載網路文件系統了,如果使用uboot命令如下:
#setenv bootargs "root=/dev/nfs nfsroot=192.168.0.宿主機文件系統路徑:/forlinx/root
ip=192.168.0.開發板:192.168.0.宿主機:255.255.255.0 console=ttySAC0,115200"
#saveenv
使用網路文件系統要確保網卡可用!可以在UBOOT下先PING下主機IP;
我的QQ285226942,還要問題的話咱們可以繼續探討
Ⅳ 在linux下編譯驅動程序,用arm-linux-gcc編譯時出現了很多錯誤
不改橡漏makefile文件,當然不能編譯羨賣了,linux的驅動就是這么搞的啊,沒辦法的,反正是批處理的,也就多花點時間嘛,你可以把一些不需要的驅動,選擇不編譯,這樣就能加快速度了。給你個辦法,在windows虛擬機中安裝交叉編譯環境,你可以在windows下編輯你的程序,linux只起到編譯的作用,這樣,兩個工作可以兄如逗同時進行,有空你還可以上上網,這樣你就不覺得時間長了。
Ⅵ 真心請教幾個關於嵌入式Linux系統的問題(滿意回答將會追加懸賞,分數雖然沒什麼意義,略表感謝之情而已)
1.這個內核路徑按理說應該是目標系統(編譯完成之後的Linux系統)的內核頭文件的路徑,是這樣么?
不對。編譯驅動需要的是內核的導出符號表。導出符號表通常在編譯好的linux源碼根目錄下。
那麼怎麼取得這個內核頭文件路徑呢?
下載目標板的內核源碼,然後進行編譯,通過後就得到了所需要的導出符號表。
在交叉編譯的時候需不需要添加額外的選項,告訴交叉編譯工具要生成內核頭文件路徑呢?
不需要,這都是Linux內核的Makefile自動完成的。
2.默認添加的文件系統是只讀的
Linux啟動時候的操作不會受這個只讀屬性影響,沒有寫屬性並不代表不能寫。況且,你得的這個結論不準確。
數據丟失可能是因為數據沒有同步到flash或者其他的外存設備。
3.一般來說,是不是交叉編譯系統完成之後,需要交叉編譯busybox(需要指定內核路徑)來獲取一系列的utilities呢?
通常不需要,busybox中只有少數與內核結構體相關的命令需要Linux內核源碼的目錄,大多數的都不需要,這個需要查看編譯的輸出結果進行確定。如果是只使用基本的命令,不需要Linux內核。
4、最後,想請教下,在移植好的嵌入式Linux系統上能否像PC機上的Linux一樣來做開發(除了硬體資源有限,其他的開發思路應該一致)呢?
應用軟體可以像pc機一樣開發,硬體相關的和內核相關的有很大的不同,比如底層和硬體驅動
sys_path沒用過
arm-linux-的前綴是有意義的。busybox通常使用gcc,ar,ld等編譯連接工具,為了和宿主機的工具區分開,需要使用前綴進行區別。僅此而已。
Ⅶ 為ARM開發的linux驅動程序,應該怎麼編譯得到.o文件
編譯驅動是要和內核相關的,你的這個Mafefile是沒問題,你查查你的/weke/kernel/s3c2410_kernel2.4.18_rel那個內核有沒有交叉編譯過
內核裡面有Makefile,所以你編譯驅動的時候指定內核路徑後,會用編譯內核的交叉編譯工具編譯,然後你試一下make default