busybox嵌入式編譯
❶ 如何解決嵌入式軟體開發過程中的亂碼問題
解決過程:
剛開始是簡單的編碼不匹配情況,修改secureCRT中的傳輸編碼方式從默認變為utf8,中文不再亂碼,但變成了問號,「??????」;
因為中文目錄是在掛載的SD卡中的(居然沒有嘗試一下網路掛載或者其他的方式下中文是否亂碼,)。,編譯內核的時候fat文件系統的codepage和isochaset配置對,掛載時選擇vfat,-o命令選擇codepage和isocharset匹配就好了,具體的命令是,mount -t vfat -o codepage=936,iocharset=utf8 /dev/mmcblk0p1 /home/。然後接下來幾天晚上就一直在鼓搗這些東西,無解;
高版本的busybox取消了中文支持,進入busybox配置,發現已經勾選了Unicode的支持。還需要修改busybox中的另外兩個文件printable_string.c以及unicode.c,把大於0x7f替換為問號的這個選擇條件去掉才行。看了一下源碼,覺得改的地方都是不勾Unicode才需要改,重新配置編譯busybox,替換根文件系統,如果問題還在進行下一步。
既然上面的提示中已經發現不勾選Unicode支持中文的方式,那就先試一下不支持Unicode顯示中文的方式吧,修改printable_string.c以及unicode.c,重新編譯,燒寫啟動設備,發現去掉Unicode果然中文支持了,不再顯示問號;到這一步還出現問題再進行下一步。
LAST_SUPPORTED_WCHAR,通過busybox源碼,可以發現有這么一個判斷if (wc > CONFIG_LAST_SUPPORTED_WCHAR){go subset;},而在subset的地方,wc被賦值為問號,明顯是這個LAST_SUPPORTED_WCHAR的原因;
查看busybox配置,發現定義表示的是Range of supported Unicode characters,默認填的值才700多,而中文在Unicode中的位置查了一下最高到U+2FA1D,隨便給這個值改了一個大於2FA1D的值,重新編譯燒寫根文件系統,中文顯示成功!
❷ 怎樣使busybox編譯出ldconfig命令
BusyBox 命令中支持的選項
BusyBox 中的命令並不支持所有可用選項,不過這些命令都包含了常用的選項。如果我們需要知道一個命令可以支持哪些選項,可以使用 --help 選項來調用這個命令,如清單 12 所示。
清單 12. 使用 --help 選項調用命令
$ ./busybox wc --help
BusyBox v1.1.1 (2006.04.09-15:27+0000) multi-call binary
Usage: wc [OPTION]... [FILE]...
Print line, word, and byte counts for each FILE, and a total line if
more than one FILE is specified. With no FILE, read standard input.
Options:
-c print the byte counts
-l print the newline counts
-L print the length of the longest line
-w print the word counts
$
這些特定的數據只有在啟用了 CONFIG_FEATURE_VERBOSE_USAGE 選項時才可以使用。如果沒有這個選項,我們就無法獲得這些詳細數據,但是這樣可以節省大約 13 KB 的空間。
向 BusyBox 中添加新命令
向 BusyBox 添加一個新命令非常簡單,這是因為它具有良好定義的體系結構。第一個步驟是為新命令的源代碼選擇一個位置。我們要根據命令的類型(網路,shell 等)來選擇位置,並與其他命令保持一致。這一點非常重要,因為這個新命令最終會在 menuconfig 的配置菜單中出現(在下面的例子中,是 Miscellaneous Utilities 菜單)。
對於這個例子來說,我將這個新命令稱為 newcmd,並將它放到了 ./miscutils 目錄中。這個新命令的源代碼如清單 13 所示。
清單 13. 集成到 BusyBox 中的新命令的源代碼
#include "busybox.h"
int newcmd_main( int argc, char *argv[] )
{
int i;
printf("newcmd called:\n");
for (i = 0 ; i < argc ; i++) {
printf("arg[%d] = %s\n", i, argv[i]);
}
return 0;
}
接下來,我們要將這個新命令的源代碼添加到所選子目錄中的 Makefile.in 中。在本例中,我更新了 ./miscutils/Makefile.in 文件。請按照字母順序來添加新命令,以便維持與現有命令的一致性:
清單 14. 將命令添加到 Makefile.in 中
MISCUTILS-$(CONFIG_MT) += mt.o
MISCUTILS-$(CONFIG_NEWCMD) += newcmd.o
MISCUTILS-$(CONFIG_RUNLEVEL) += runlevel.o
接下來再次更新 ./miscutils 目錄中的配置文件,以便讓新命令在配置過程中是可見的。這個文件名為 Config.in,新命令是按照字母順序添加的:
清單 15. 將命令添加到 Config.in 中
config CONFIG_NEWCMD
bool "newcmd"
default n
help
newcmd is a new test command.
這個結構定義了一個新配置項(通過 config 關鍵字)以及一個配置選項(CONFIG_NEWCMD)。新命令可以啟用,也可以禁用,因此我們對配置的菜單屬性使用了 bool (Boolean)值。這個命令默認是禁用的(n 表示 No),我們可以最後放上一個簡短的 Help 描述。在源代碼樹的 ./scripts/config/Kconfig-language.txt 文件中,我們可以看到配置語法的完整文法。
接下來需要更新 ./include/applets.h 文件,使其包含這個新命令。將下面這行內容添加到這個文件中,記住要按照字母順序。維護這個次序非常重要,否則我們的命令就會找不到。
清單 16. 將命令添加到 applets.h 中
USE_NEWCMD(APPLET(newcmd, newcmd_main, _BB_DIR_USER_BIN, _BB_SUID_NEVER))
這定義了命令名(newcmd),它在 Busybox 源代碼中的函數名(newcmd_main),應該在哪裡會為這個新命令創建鏈接(在這種情況中,它在 /usr/bin 目錄中),最後這個命令是否有權設置用戶 id(在本例中是 no)。
倒數第二個步驟是向 ./include/usage.h 文件中添加詳細的幫助信息。正如您可以從這個文件的例子中看到的一樣,使用信息可能非常詳細。在本例中,我只添加了一點信息,這樣就可以編譯這個新命令了:
清單 17. 向 usage.h 添加幫助信息
#define newcmd_trivial_usage "None"
#define newcmd_full_usage "None"
最後一個步驟是啟用新命令(通過 make menuconfig,然後在 Miscellaneous Utilities 菜單中啟用這個選項)然後使用 make 來編譯 BusyBox。
使用新的 BusyBox,我們可以對這個新命令進行測試,如清單 18 所示。
清單 18. 測試新命令
$ ./busybox newcmd arg1
newcmd called:
arg[0] = newcmd
arg[1] = arg1
$ ./busybox newcmd --help
BusyBox v1.1.1 (2006.04.12-13:47+0000) multi-call binary
Usage: newcmd None
None
就是這樣!BusyBox 開發人員開發了一個優秀但非常容易擴展的工具。
結束語
BusyBox 是為構建內存有限的嵌入式系統和基於軟盤系統的一個優秀工具。BusyBox 通過將很多必需的工具放入一個可執行程序,並讓它們可以共享代碼中相同的部分,從而對它們的大小進行了很大程度的縮減,BusyBox 對於嵌入式系統來說是一個非常有用的工具,因此值得我們花一些時間進行探索。
上文網上轉載!
1.USE_NEWCMD(APPLET(newcmd, newcmd_main, _BB_DIR_USER_BIN, _BB_SUID_NEVER))
此語句,在編譯的時候會報出 USE_NEWCMD 未定義!
故使用源碼中的類似語句 APPLET(newcmd, newcmd_main, _BB_DIR_USER_BIN, _BB_SUID_NEVER) 替代之,編譯通過
2.但是 在此時測試命令的時候並沒有得到上文給出的結果,而是提示:
"#./busybox newcmd
newcmd: applet not found "
和
「
# ./newcmd 11
11: applet not found
❸ 如何使用busybox編譯和生成最簡lin
在ubuntu系統下創建一個rootfs目錄,用於存放busybox生成的根文件系統,也可設置為nfs的掛載目錄,直接通過網路文件系統進行掛載,便於開發。我自己就將該目錄創建在/opt/FriendlyARM/mini2440/rootfs處。並在該目錄下創建一些必備的子目錄:
leon@Ubuntu:/opt/FriendlyARM/mini2440/rootfs$ mkdir bin dev etc proc sbin sys tmp usr leon@Ubuntu:/opt/FriendlyARM/mini2440/rootfs$ ls bin dev etc proc sbin sys tmp usr
1、修改Makefile配置
進入busybox目錄,修改Makefile文件,在文件頭處加入內容如下:
ARCH ?= arm CROSS_COMPILE ?= arm-linux-
2、修改配置文件
make menuconfig
選擇Busybox Settings—>
1、Build Options—>,選擇[*] Build Busybox as a static binary(no shared libs); 2、Installtion Options,在busybox instantlltionprefix一欄中,輸入你想要創建rootfs的目錄。比如我的是/opt/FriendlyARM/mini2440/rootfs。
保存,退出。
3、編譯源碼
輸入make,進行編譯;這其中估計會遇到一些錯誤,可參見我的另外一篇博客(linux(ubuntu)編譯busybox遇到的問題處理辦法)。編譯成功後,會給出以下提示:
LINK busybox_unstripped Static linking against glibc, can't use --gc-sections Trying libraries: crypt m Library crypt is not needed, excluding it Library m is needed, can't exclude it (yet) Final link with: m DOC busybox.pod DOC BusyBox.txt DOC busybox.1 DOC BusyBox.html
編譯通過之後,輸入make install命令進行安裝,busybox會自動將rootfs根文件系統安裝到之前設置的目錄下。
❹ 什麼是busybox,在嵌入式系統中為什麼要使用busybox
busybox是跟文件系統,根文件系統是一系列linux應用程序的集合,典型的是一個shell程序,可以作為終端輸入命令行供用戶執行應用程序。
❺ 安卓busybox怎麼使用busybox可以干什麼
BusyBox 將許多具有共性的小版本的UNIX工具結合到一個單一的可執行文件。這樣的集合可以替代大部分常用工具比如的GNU fileutils , shellutils等工具,BusyBox提供了一個比較完善的環境,可以適用於任何小的嵌入式系統。
2、發源
BusyBox 最初是由 Bruce Perens 在 1996 年為Debian GNU/Linux安裝盤編寫的。其目標是在一張軟盤上創建一個可引導的 GNU/Linux 系統,這可以用作安裝盤和急救盤。
3、編譯安裝
#make
#make install
編譯好後在busybox目錄下生成子目錄_install,裡面的內容:
drwxr-xr-x 2 root root 4096 11月 24 15:28 bin
rwxrwxrwx 1 root root 11 11月 24 15:28linuxrc -> bin/busybox
drwxr-xr-x 2 root root 4096 11月 24 15:28 sbin
其中可執行文件busybox在需要製作文件系統映像燒入板子的情況下,busybox應放在根文件系統目錄下的bin中,其他的都是指向他的符號鏈接。
4、、配置
busybox的配置程序和linux內核菜單配置方式簡直一模一樣。熟悉用make menuconfig方式配置linux內核的朋友很容易上手。
#cp busybox-1.00.tar.gz /babylinux
#cd /babylinux
#tar xvfz busybox-1.00.tar.gz
#cd busybox-1.00
#make menuconfig
下面是需要編譯進busybox的功能選項。
General Configuration應該選的選項
Show verbose applet usage messages
Runtime SUID/SGID configuration via /etc/busybox.conf
Build Options
Build BusyBox as a static binary (no shared libs)
這個選項是一定要選擇的,這樣才能把busybox編譯成靜態鏈接的可執行文件,運行時才獨立於其他函數庫。否則必需要其他庫文件才能運行,在單一個linux內核不能使它正常工作。
Installation Options
Don't use /usr
這個選項也一定要選,否則make install 後busybox將安裝在原系統的/usr下,這將覆蓋掉系統原有的命令。選擇這個選項後,make install後會在busybox目錄下生成一個叫_install的目錄,裡面有busybox和指向它的鏈接。
❻ 如何獲取busybox軟體
Android是基於Linux系統的,在學習和使用Android系統時,不可避免的要和Terminal打交道。但是Android自帶的Terminal emulator實在是簡陋,連一些基本的命令都不具備。有沒有什麼解決方法呢?有的,這便是被稱為「嵌入式Linux中的瑞士軍刀」的Busybox。
一、BusyBox
BusyBox 是標准 Linux 工具的一個單個可執行實現。BusyBox 包含了一些簡單的工具,例如 cat 和 echo,還包含了一些更大、更復雜的工具,例如 grep、find、mount 以及 telnet。有些人將 BusyBox 稱為 Linux 工具里的瑞士軍刀。簡單的說BusyBox就好像是個大工具箱,它集成壓縮了 Linux 的許多工具和命令。
二、安裝
取得設備的Root許可權(網上查找)。
下載Busybox(下載 )編譯安裝,也可以直接下載binary文件(下載 )。
將Busybox binary文件拷貝到Android系統的/system/xbin目錄下。
三、使用
1. 在安裝完後便可以使用了。使用方法:busybox command,例如,busybox ls
看顏色是不是變了。
2. 因為系統裡面也有ls命令,如果直接調用ls將會調用系統的ls,這樣要想使用busybox的命令就必須加上busybox字元。這樣很不方便,有沒有辦法可以省去這樣麻煩呢?
方法一: 使用命令 alies,例如:
# alias ls=』busybox ls』
這個方法的缺點是重啟終端,又會恢復原樣。
方法二: 刪除或者重命名 /system/bin/toolbox
參考文獻:
為Android安裝BusyBox —— 完整的bash shell[OL].http://www.cnblogs.com/xiaowenji/archive/2011/03/12/1982309.html
Android自帶的toolbox分析及擴展[OL].http://blog.csdn.net/a345017062/article/details/6250619
❼ 如何使用Busybox構建出基本的嵌入式Linux根文件系統研究
為了方便和簡化嵌入式Linux開發過程中的調試過程,主要研究了如何使用Busybox構建出基本的嵌入式Linux根文件系統,包括Busybox的配置、編譯和安裝。在此基礎上,進一步構建出基於NFS的嵌入式Linux根文件系統,並給出了啟動腳本和配置文件。這種根文件系統可以方便地在線更改、調試程序,降低了嵌入式系統的開發門檻。
隨著信息技術的發展,嵌入式系統技術已經廣泛應用於國防、通信、工業控制、消費電子等諸多領域。其中,Linux作為一款開源、成熟且高效穩定的多任務操作系統,先天具有許多不可比擬的優勢,已成為目前最具潛力的嵌入式操作系統。眾所周知,構建根文件系統對於嵌入式Linux開發至關重要,它是內核啟動後載入的第1個文件系統,是決定系統能否正常啟動的關鍵所在。在開發階段,程序往往需要反復多次的調試,鑒於此,構建基於NFS(Network
File
System)的根文件系統就尤為重要;這樣就免去了對目標開發板的反復燒寫,方便地在線對程序進行更改與調試。本文以Busybox軟體為基礎,介紹了一種實用的NFS根文件系統構建方法。
1
嵌入式根文件系統簡介
Linux啟動時,第一個必須掛載的就是根文件系統;若系統不能從指定設備上掛載根文件系統,則系統會報錯進而退出啟動。系統成功啟動之後,才可以自動或手動掛載其他的文件系統。
Linux系統各個分區存儲文件時,需要遵循一定的格式,這種文件格式稱為文件系統類型,比如常見的有ext2,ext3,ext4等。在存儲設備方面,FLASH是目前嵌入式系統中廣泛採用的主流存儲設備,它是一種可電擦寫的非易失性存儲器,具有體積小,功耗低,密度高等優點。目前FLASH中常見的文件系統主要有Cramfs,Jffs2,Yaffs2等。嵌入式Linux基本的根文件目錄結構如表1所示。
2
Busybox簡介
Busybox常被形象地稱為嵌入式Linux系統開發中的「瑞士軍刀」,它將許多常用的UNIX命令和工具結合到了一個單獨的可執行程序中。雖然與相應的GNU工具相比較,Busybox所提供的功能和參數略少,但在比較小的系統或者嵌入式系統中已經足夠了。它僅用一個可執行文件就可以提供基本的Linux操作系統所需的命令,體積很小,配置起來也很方便。
❽ 嵌入式busybox命令介紹
看這個
http://blog.csdn.net/zxg623/archive/2007/11/17/1889805.aspx
❾ arm-linux-嵌入式busybox創建的arm的文件系統
這個要看你選擇哪種類型的文件系統,yaffs2,jaffe,ubi,不同的文件系統製作的命令也不一樣。拿yaffs2文件系統來舉例,如果你利用busybox製作好了各種文件夾和命令之後,利用mkyaffs2image命令即可生成能燒進arm的文件系統