2017年5月31日
簡(jiǎn)要:
主要涉及了, 在Ubuntu為PC的主系統(tǒng)時(shí)的一些燒寫U-boot, 和kernel的注意事項(xiàng);
主要內(nèi)容:
燒寫U-boot:
- 由于老版的U-boot對(duì)最新版的arm-linux-gcc支持不好所以, 編譯時(shí), 應(yīng)該使用舊版的arm-linux-gcc支持不好所以, 編譯時(shí), 應(yīng)該使用舊版的arm-linux-gcc行剂。
- 編譯的操作過(guò)程:
- 將U-boot壓縮文件和對(duì)應(yīng)的補(bǔ)丁文件復(fù)制到自己的工作目錄下
- 解壓U-boot, 命令: tar -xjf filename
- 進(jìn)入解壓后的U-boot目錄, 并打補(bǔ)丁。命令: cd filename; patch -p1 < ../filenameofpatch
- 根據(jù)自己開(kāi)發(fā)板的芯片不同的, 調(diào)用相關(guān)配置文件進(jìn)行配置。命令: (以s3c2440為例) make 100ask24x0_config
- 修改頂層Makefile: (空白處添加)
- ARCH = arm
- CROSS_COMPILE = arm-linux-
- 開(kāi)始編譯。命令: make
- 燒寫時(shí), 可以參考裸機(jī)燒寫方式: sudo oflash 0 1 0 0 0 u-boot.bin
燒寫kernel:
- 注意: kernel的編譯過(guò)程有三點(diǎn):
- make menuconfig 時(shí)終端盡量全屏;
- 目測(cè)好像編譯只能在32位Ubuntu上才能操作成功;
- 一定要安裝 ncurses程序庫(kù), 不然最后make menuconfig 會(huì)出現(xiàn)錯(cuò)誤;
- 配置方式有三:
- 直接make menuconfig,然后自己一項(xiàng)一項(xiàng)進(jìn)行配置
. 在kernel的默認(rèn)配置里找到與自己芯片最接近或者自己的芯片的默認(rèn)配置
- 默認(rèn)配置在 ./arch/arm/config 目錄之下
- 命令:
make s3c2410_defconfig (以三星s3c2440為例) make menuconfig
- 使用廠家提供的配置文件, 并將廠家的配置文件更名為 .config(ps:文件一定放置在kernel的根目錄下)
make menuconfig
- 編譯時(shí)的注意事項(xiàng):
- 由于kernel的版本過(guò)低, 與現(xiàn)版本的make不兼容, 所以會(huì)出現(xiàn)如下錯(cuò)誤:
Makefile:416: *** mixed implicit and normal rules: deprecated syntax
Makefile:1449: *** mixed implicit and normal rules: deprecated syntax
make: *** No rule to make target 'menuconfig'. Stop.
解決方法:打開(kāi)Makefile, 修改對(duì)應(yīng)行: 416: config %config: scripts_basic outputmakefile FORCE $(Q)mkdir -p include/linux include/config $(Q)$(MAKE) $(build)=scripts/kconfig $@ 修改為: %config: scripts_basic outputmakefile FORCE $(Q)mkdir -p include/linux include/config $(Q)$(MAKE) $(build)=scripts/kconfig $@ 1449: / %/: prepare scripts FORCE $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ $(build)=$(build-dir) 修改為: %/: prepare scripts FORCE $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ $(build)=$(build-dir)
- 最后編譯: make uImage (生成的uImage在 arch/arm/boot/uImage)
- 燒錄操作: 燒錄方式, 是在有U-boot的情況下通過(guò)tftp燒錄
- 對(duì)于tftp的相關(guān)配置, 參考: http://www.linuxidc.com/Linux/2016-07/133255.htm
- 對(duì)于板子和PC機(jī)的連接:
- 連三條線: USB, COM, 網(wǎng)線,
- 設(shè)置電腦以太網(wǎng)靜態(tài)ip, 網(wǎng)關(guān), 掩碼(參考相關(guān)教程)
- 通過(guò)板子 ping 電腦的靜態(tài)ip 檢驗(yàn)是否鏈接。(前提時(shí)修改U-boot環(huán)境變量中的serverip為電腦靜態(tài)ip)
- 設(shè)置虛擬機(jī)為橋接模式, 同時(shí)選擇復(fù)制物理網(wǎng)絡(luò)連接狀態(tài), 編輯->虛擬網(wǎng)絡(luò)編輯器->更改設(shè)置->還原默認(rèn)設(shè)置->Vment0橋接模式->選擇網(wǎng)卡;
- 選擇有線網(wǎng)卡, 無(wú)法上網(wǎng), 但可以和板子通信, 無(wú)法與主機(jī)通信;
- 選擇無(wú)線網(wǎng)卡, 可以上網(wǎng), 無(wú)法與板子通信, 可以與主機(jī)通信;
- 將uImage復(fù)制到tftpboot目錄下
在板子U-boot中執(zhí)行:tftp 30000000 uImage (下載 kernel) nand erase kernel (擦除分區(qū)) nand write.jffs2 30000000 kernel (燒寫kernel)
文件系統(tǒng)
tftp:
tftp 30000000 filename.yaffs2
nand erase root
nand write.yaffs 30000000 0x00260000 $(filesize)
OR:
tftp 30000000 filename.jffs2
nand erase root
nand write.jffs2 30000000 0x00260000 $(filesize)
完成后 reboot || 重新上電
完成!!
補(bǔ)充說(shuō)明
2017年10月31日
編譯器選項(xiàng)(arm-linux-gcc)
1. 總體選項(xiàng)
- -c:
預(yù)處理, 編譯和匯編源文件。不作連接, 生成OBJ文件走贪。 - -S:
編譯后停止, 輸出非匯編語(yǔ)言文件對(duì)應(yīng)的匯編語(yǔ)言文件。 - -E:
預(yù)處理后停止, 并且將代碼送往標(biāo)準(zhǔn)輸出; - -o file:
指定輸出文件為file; - -v:
顯示制作GCC工具自身時(shí)的配置命令; 還有一系列相關(guān)的版本號(hào);
2. 警告選項(xiàng) (-Wall)
打開(kāi)所有需要注意的警告信息惑芭。
3. 調(diào)試選項(xiàng) (-g)
以操作系統(tǒng)的本地格式產(chǎn)生調(diào)試信息;
4. 優(yōu)化選項(xiàng)
- -O或-O1:
一級(jí)優(yōu)化, 減少目標(biāo)碼大小和執(zhí)行時(shí)間; - -O2
進(jìn)一步優(yōu)化, 執(zhí)行幾乎所有優(yōu)化操作; - -O3
優(yōu)化更多, 比-O2多打開(kāi)了"-finline-functions" - -O0;
不優(yōu)化; - 多個(gè)-O選項(xiàng), 生效最后一個(gè);
5. 連接器選項(xiàng)
- object-file-name:
沒(méi)有格式說(shuō)明的文件, 默認(rèn)為OBJ文件或庫(kù)文件坠狡。 - -library:
連接名為library的庫(kù)文件; -L指定庫(kù)文件路徑。
(以下兩個(gè)選項(xiàng)多用于編譯bootloader, 和內(nèi)核)
-nostartfiles:
不連接系統(tǒng)標(biāo)準(zhǔn)啟動(dòng)文件;-nostdlib:
不連接系統(tǒng)標(biāo)準(zhǔn)啟動(dòng)文件和標(biāo)準(zhǔn)庫(kù)文件遂跟。-static
在支持動(dòng)態(tài)連接的系統(tǒng)阻止連接共享庫(kù);-shared
生成共享OBJ文件;
生成靜態(tài)庫(kù):
ar rcs libsource.a source.o
生成動(dòng)態(tài)庫(kù):
gcc -shared -fPIC -o libsource.so source.o
補(bǔ)充說(shuō)明
2017-11-06
- linux內(nèi)核編譯時(shí), 若想生成uImage(內(nèi)核文件的'頭')逃沿。需要有mkimage命令:
安裝命令:
sudo apt-get install u-boot-tool