busybox移植到ARM開發板

2021-09-30 14:19:24 字數 3370 閱讀 8414

這裡是簡單介紹什麼是busybox,busybox的移植步驟,以及其中遇到的一些問題,然後介紹了其中一些資料夾的作用。移植完成後再將交叉編譯工具鏈中的動態鏈結庫拷貝到構建好的根檔案系統當中,並且使用hello world程式對動態鏈結庫進行測試。

(1)busybox是乙個c語言寫出來的專案,裡面包含了很多.c檔案和.**件。

(2)busybox這個程式開發出來就是為了在嵌入式環境下構建根檔案系統(以下簡稱rootfs)使用的,也就是說他就是專門開發的init程序應用程式。

(3)busybox為當前系統提供了一整套的shell命令程式集。譬如vi、cd、mkdir、ls等。在桌面版的linux發行版(譬如ubuntu、redhat、centos等)中vi、cd、ls等都是乙個乙個的單獨的應用程式。但是在嵌入式linux中,為了省事我們把vi、cd等所有常用的shell命令集合到一起構成了乙個shell命令包,起名叫busybox。

(1)dev目錄。在linux中一切皆是檔案,因此乙個硬體裝置也被虛擬化成乙個裝置檔案來訪問,在linux系統中/dev/***就表示乙個硬體裝置

(2)sys和proc目錄。該目錄在最小rootfs中也是不可省略的,但是這兩個只要建立了空資料夾即可,屬於linux中的虛擬檔案系統。

(3)usr目錄。該目錄是系統的使用者所有的一些檔案的存放地,這個東西將來busybox安裝時會自動生成。

(4)etc目錄。這是很關鍵很重要的乙個目錄,目錄中的所有檔案全部都是執行時配置檔案。

(5)lib目錄。這是rootfs中很關鍵的乙個,不能省略的乙個。lib目錄下放的是當前作業系統中的動態和靜態鏈結

arch = arm

cross_compile = /usr/local

/arm/arm2009q3/bin//arm-none-linux-gnueabi-

(2)在make menuconfig 中進行必要的配置,配置方法見」busybox menuconfig配置」。

(3)報錯』mtd_file_mode_raw』 undeclared ,因為我們沒有使用 nandfalsh ,所以把這個檔案去掉。在 menuconfig 中搜尋 nandwrite 取消即可。

(4)報錯』blksecdiscard』 undeclared,這是寫sd卡的程式,不能直接去掉。blksecdiscard 定義在 /usr/include/linux/fs.h 檔案中,進入報錯檔案 util-linux/blkdiscard.c 中,將注釋掉原來的#include 「linux/fs.h」,加上 #include 「/usr/include/linux/fs.h」 即可。

(5)報錯 undefined reference to 『setns』,在 menuconfig 中去掉 nsenter 的定義。

(6)報錯 undefined reference to 『syncfs』,在 menuconfig 中去掉 sync 的定義。

(7)在menuconfig 中的修改安裝路徑

(8)make install

(啟動後根檔案系統掛載成功,但是一直在報錯:can』t open /dev/tty2: no such file or directory)

該檔案屬於乙個執行時配置檔案實際工作的時候 busybox 會(按照一定的格式)解析這個 inittab 文字檔案,然後根據解析的內容來決定要怎麼工作。 inittab 的格式在 busybox 中定義的,網上可以搜尋到詳細的格式說明,具體去參考即可

(啟動後正常進入命令列,但是提示沒有找到/etc/init.d/rsc ,可以執行ls、cd、pwd等命令)

(1)rcs檔案是系統的初始化檔案,被etc/inittab

所呼叫,其中的內容是一些指令碼資訊。

(2)path 這個環境變數是 linux 系統內部定義的乙個環境變數,含義是作業系統去執行程式時會預設到 path 指定的各個目錄下去尋找。

(3)runlevel=s表示將系統設定為單使用者模式

(4)umask值決定當前使用者在建立檔案時的預設許可權

(5)mount -a是掛載所有的應該被掛載的檔案系統,在busybox中 mount -a 時 busybox 會去查詢乙個檔案 /etc/fstab 檔案,這個檔案按照一定的格式列出來所有應該被掛載的檔案系統(包括了虛擬檔案系統)

(6)mdev 是 udev 的嵌入式簡化版本, udev/mdev 是用來配合 linux 驅動工作的乙個應用層的軟體, udev/mdev 的工作就是配合 linux 驅動生成相應的/dev目錄下的裝置檔案。

(7)hostname是linux中的乙個shell命令。命令(hostname ***)執行後可以用來設定當前系統的主機名為***,直接hostname不加引數可以顯示當前系統的主機名。

(1)複製 rcs 檔案到 /etc/init.d 資料夾中,開機仍然提示檔案不存在,原因是 windows 中的換行符和 linux 不一樣。

(2)securecrt中 vi rcs 刪除其中的^m,開機提示找不到 /etc/fstab ,將其新增,並且在根目錄建立 proc, dev, var, sys, tmp 目錄中的所有檔案全部都是執行時配置檔案。

(3)重新開機,沒有提示錯誤,進入 proc,sys,其中有檔案

(1)新增 /etc/profile 檔案,之後的實驗現象:命令列提示符前面顯示:[@my210 ]#

(2)my210 定義在 /etc/sysconfig/hostname 檔案中,但是 @ 前面是使用者名稱,這裡還沒有登入程式,所以沒有顯示

(1)在 inittab 中新增

s3c2410_serial2:

:respawn

:/sbin/getty -l s3c2410_serial2 115200 vt100

表示開機的時候使用 /sbin/getty 登入程式

(2)新增 /etc/passwd 檔案和 /etc/shadow 檔案,指定使用者名稱和密碼,passwd 檔案中需要把 /etc/bash 改為 /etc/sh ,shadow需要將密碼刪除

(3)重新啟動即可使用 root 登入,登入後使用 passwd root 命令新增使用者密碼

(1)先在 /root 目錄下建立 hello_world.c 檔案,使用 arm-linux-gcc 交叉編譯工具鏈編譯,使用動態鏈結,生成可執行檔案

(2)

cp /usr/local/arm/arm-

2009q3/arm-none

-linux

-gnueabi/libc/lib/*so* . -rdf

拷貝動態鏈結庫,so是過濾掉非動態鏈結庫的檔案,-rdf是保證符號鏈結仍是符號鏈結

(3)使用 arm-linux-strip 去掉鏈結庫中的符號資訊,縮小庫的體積

(4)在 開發板上能夠執行hello_world 程式

移植ubuntu core到Arm開發板

最初是想把整個ubuntu移植到mx51開發板,因為專案不需要執行桌面系統,所以只移植了乙個基本的ubuntu core系統 這個映象就是乙個rootfs,可以作為根檔案系統使用。2.把映象燒寫到開發板的乙個分割槽上 3.我的arm開發板是mx51,修改uboot啟動引數如下 set bootarg...

qwt移植到arm開發板

arm版本的qwt和x86一樣,只需要改幾個地方即可。1 首先設定編譯工具鏈環境變數 path usr local arm 4.4.1 bin path 2 qmake 生成arm版本的makefile 在原始碼的qwt 6.1.0目錄下執行 opt qt 4.7.1 bin qmake 3 注意 ...

移植SQLite到ARM開發板

最近在搞移植資料庫到開發板,上網一搜都是sqlite 所以就用這個吧,記錄一下,特別簡單,首先要確保開發環境是好的,交叉編譯器,nfs檔案系統掛載等,拷貝到ubutun系統裡,解壓 tar xzvf sqlite autoconf 3080403.tar.gz 進入目錄 cd sqlite auto...