1. 程式人生 > >tiny4412 busybox製作根檔案系統rootfs nfs 掛載 ubuntu 14.04

tiny4412 busybox製作根檔案系統rootfs nfs 掛載 ubuntu 14.04

首先得要有製作好的uboot和linux核心映象zImage,先燒錄到sd卡里,這個是已經做好了的工作。

一,ubuntu上先設定好nfs服務

1.新建一個要掛載的檔案

[email protected]:~/share$ pwd

/home/liudijiang/share

我已經建好了,這是我的路徑

2.安裝nfs服務

[email protected]:~/share$ sudo apt-getinstall nfs-kernel-server

3.修改/etc/exports檔案

[email protected]:~/share$ sudo vim/etc/exports

在檔案最後新增如下內容

/home/liudijiang/share  *(rw,sync,no_root_squash,no_subtree_check)

*:允許所有的網段訪問,也可以使用具體的IP

rw:掛接此目錄的客戶端對該共享目錄具有讀寫許可權

sync:資料同步寫入記憶體和硬碟

no_root_squash:root使用者具有對根目錄的完全管理訪問許可權。

no_subtree_check:不檢查父目錄的許可權。

注意,*和後面的括號不能出現空格。

然後儲存退出。

4. 重啟rpcbind 服務,(14.04版本是rpcbind,較老的版本好像是portmap)

[email protected]:~/share$ sudo/etc/init.d/rpcbind restart

5.重啟nfs-kernel-server

[email protected]:~/share$ sudo /etc/init.d/nfs-kernel-serverrestart

 *Stopping NFS kernel daemon                                            [OK ]

 *Unexporting directories for NFS kernel daemon...                        [ OK ]

 *Exporting directories for NFS kernel daemon...                              [ OK ]

 *Starting NFS kernel daemon                                             [OK ]

6.測試nfs服務是否成功

[email protected]:~/share$ sudo mount -tnfs localhost:/home/liudijiang/share /mnt

把本地的/home/liudijiang/share資料夾掛載到/mnt上

在share檔案新建和修改的東西就出現在了/mnt上了

取消掛載,sudo umount /mnt

注意,在/mnt下時,執行取消掛載不能成功的,得不在這個路徑下才可以取消掛載

到這一步就已經設定好了nfs服務了,一旦開發板能和ubuntu的ip地址ping通,就可以掛載ubuntu的檔案夾了。

二,製作busybox

busybox官網

1.找到busybox-1.23.2.tar.bz2並下載下來,解壓

[email protected]:~/work$ tar xfbusybox-1.23.2.tar.bz2

2.配置busybox

[email protected]:~/work/busybox-1.23.2$make menuconfig

1)配置動態連結庫和設定編譯器字首

進入Busybox Setting選單後進入Build Options選單



這裡編譯器是arm-linux-gcc,所以字首填arm-linux-,這裡選擇動態連結庫,連結的是arm-linux-gcc的庫,後面要從安裝arm-linux-gcc的地方考出要用到的庫。

2)安裝路徑

進入Installation Options

 


3)配置模組命令

進入Linux Module Utilities

 


pretty output、blacklist support、depmod選進去也行。

4)儲存配置

進入Save Configuration to an Alternate File選單



直接ok就行

3.編譯,安裝

[email protected]:~/work/busybox-1.23.2$make -j16;make install -j16

[email protected]:~/work$ ls rootfs/

bin linuxrc  sbin  usr

bin sbin usr三個資料夾存放各種命令

linuxrc是一個軟連線檔案,連線到bin/busybox程式

4.檢測busybox是否成功

[email protected]:~/work/rootfs$ filebin/busybox

bin/busybox: ELF 32-bit LSB  shared object, ARM, EABI5 version 1 (SYSV),dynamically linked (uses shared libs), stripped

上面顯示ARM平臺執行,說明安裝成功了。

5.完善動態連結庫

我們在busybox設定的是動態連結庫,而且編譯器是arm-linux-gcc,找到安裝arm-linux-gcc的安裝路徑

[email protected]:~/work/rootfs$ which arm-linux-gcc

/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc

上面是我的路徑,/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib,這個就是要複製出來的動態庫的路徑,把裡面的動態連結檔案複製到rootfs資料夾下

先在rootfs檔案下建立其他資料夾,模仿ubuntu系統,看看他的根目錄下有哪些資料夾

[email protected]:~/work/rootfs$ mkdiretc/init.d dev home proc tmp var mnt root sys opt lib –p

複製動態連結檔案

[email protected]:~/work/rootfs$ cp/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/*.so* lib/ -rap

6.建立控制檯裝置檔案

[email protected]:~/work/rootfs$ sudo mknoddev/console c 5 1

這個檔案是字元裝置,主裝置號是5,次裝置號是1,只能用mknod命令建立

7.建立etc/下必要檔案

[email protected]:~/work/rootfs/etc$ tree./

./

├── fstab  必要檔案,掛著檔案中指定的所有檔案系統

├── group 不是必要檔案,要設定密碼時需要

├── init.d 必要的資料夾

│   ├── rcS 必要檔案

│   └── rcS.bak 必要檔案

├── inittab  從busybox的example檔案下複製

├──passwd  不是必要檔案,要設定密碼時需要

├── profile  不是必要檔案,可以建立來支援命令提示格式配置,配置系統環境變數

└── shadow  不是必要檔案,要設定密碼時需要

1)建立etc/inittab檔案

我們可以用busybox提供的示例檔案複製過來

[email protected]:~/work/busybox-1.23.2/examples$ls

inittab …

將以下內容(59行左右)

# Start an "askfirst" shell onthe console (whatever that may be)

::askfirst:-/bin/sh

# Start an "askfirst" shell on/dev/tty2-4

tty2::askfirst:-/bin/sh   add "console" in line 60, commentline 62 - 64

tty3::askfirst:-/bin/sh

tty4::askfirst:-/bin/sh

修改為

# Start an "askfirst" shell onthe console (whatever that may be)

console::askfirst:-/bin/sh     #這裡加上console,也就是前面在dev資料夾下建立的控制檯

# Start an "askfirst" shell on/dev/tty2-4

#tty2::askfirst:-/bin/sh   add "console" in line 60, commentline 62 - 64

#tty3::askfirst:-/bin/sh

#tty4::askfirst:-/bin/sh

2)fstab檔案

手動建立一個fstab檔案,新增以下內容

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  defaults        0 0

sysfs                   /sys                    sysfs   defaults       0 0

proc                    /proc                   proc    defaults        0 0

第一列是掛載裝置,第二列是掛載目錄,第三列是掛載檔案系統型別,第四列是掛載選項分別有

auto:系統自動掛載,fstab預設就是這個選項

ro:read-only

rw:read-write

defaults:rw,suid,dev,exec,auto,nouser,and async

第五列為dump選項,設定是否讓備份程式dump備份檔案系統,0為忽略,1為備份

第六列為fsck選項,告訴fsck程式以什麼順序檢查檔案系統,0為忽略

3)rcS檔案

在init.d資料夾下建立,新增以下內容

#!/bin/sh

mount –a #掛載fstab檔案中所有指定的檔案系統

mkdir /dev/pts

mount -t devpts devpts /dev/pts

echo /sbin/mdev >/proc/sys/kernel/hotplug

mdev –s   #建立控制檯

/bin/hostname ubuntu #這裡修改hostname

注意,檢視一下rcS檔案的許可權,如果沒有執行許可權的話,開發板的linux核心不能執行這個檔案

sudo chmod +x rcS  新增許可權

4)profile檔案

新增以下內容

USER="`id -un`"

LOGNAME=$USER

PS1='[\[email protected]\h \W]# '

PATH=$PATH

HOSTNAME=`/bin/hostname`

#匯出環境變數

export USER LOGNAME PS1 PATH

5)group、passwd、shadow三個檔案是要用密碼登陸的時候才用到的,可以從linux系統的/etc/group、/etc/passwd 、/etc/shadow 拷貝過來

然後修改inittab檔案,原來修改的地方改成:
# Start an "askfirst" shell on the console (whatever that may be)

#console::askfirst:-/bin/sh

::respawn:-/sbin/getty 115200 ttySAC0

# Start an "askfirst" shell on /dev/tty2-4

#tty2::askfirst:-/bin/sh   add "console" in line 60, commentline 62 - 64

#tty3::askfirst:-/bin/sh

#tty4::askfirst:-/bin/sh

這裡用的賬號密碼時原來ubuntu linux上已有的賬號密碼

這裡還要修改passwd檔案的內容,將所有”/bin/bash“ 改成“/bin/sh”

這是修改shell指令碼的型別,PC上linux執行的是bash shell指令碼,開發板linux執行的是sh shell指令碼。

不用這個也可以,不用的時候開發板開機執行直接進入命令行了,加上這些的時候,開機執行後要登陸的賬號密碼才能進入開發板的linux系統,純粹是為了好玩的。。。

小結一下這部分:

1.      inittab,rcS,fstab關係

系統啟動掛載檔案系統--->

--->讀取/etc/inittab檔案,解析其中定義的動作

--->根據sysinit定義的process執行/etc/init.d/rcS

--->/etc/init.d/rcS中第一條命令 mount -a

--->讀取/etc/fstab檔案

--->根據檔案列表內容逐個掛載其中的裝置到指定地

2.profile檔案

設定環境變數,根據這裡設定命令提示符號相關的環境變數

使用者可以根據自己需要新增環境變數

3./etc/init.d/rcS執行系統初始化時候,想開機啟動的程式都可以寫在這個檔案中

4.group存放使用者ID資訊,命令提示符號格式配置需要使用這個檔案

5.passwd和使用者相關的密碼

等會設定好電腦、ubuntu、開發板的ip後,開發板uboot設定好啟動後掛載ubuntu的這個rootfs,就能夠在電腦和Xshell上通用rootfs這個檔案夾了。開發板linux執行起來也就是讀取rootfs裡面這些檔案,執行這些檔案的內容了。

三,設定電腦主機、虛擬機器、開發板的ip地址

先把開發板和電腦網線連線起來,讓開發板跑起來,雖然這時候什麼也沒動,但應該能看到開發板和電腦的網口的指示燈都是亮的

設定電腦的ip

為了開發方便,手動設定成靜態ip




儲存即可

[email protected]:~/work/rootfs$ ifconfig

eth0     Link encap:乙太網  硬體地址00:0c:29:29:30:8a 

         inet 地址:192.168.3.27  廣播:192.168.3.255  掩碼:255.255.255.0

         inet6 地址: fe80::20c:29ff:fe29:308a/64 Scope:Link

         UP BROADCAST RUNNING MULTICAST MTU:1500  躍點數:1

         接收資料包:2421 錯誤:0 丟棄:0 過載:0 幀數:0

         傳送資料包:2849 錯誤:0 丟棄:0 過載:0 載波:0

         碰撞:0 傳送佇列長度:1000

         接收位元組:335705 (335.7 KB)  傳送位元組:2430579(2.4 MB)

         中斷:19 基本地址:0x2000

lo       Link encap:本地環回 

         inet 地址:127.0.0.1  掩碼:255.0.0.0

         inet6 地址: ::1/128 Scope:Host

         UP LOOPBACK RUNNING MTU:65536  躍點數:1

         接收資料包:506 錯誤:0 丟棄:0 過載:0 幀數:0

         傳送資料包:506 錯誤:0 丟棄:0 過載:0 載波:0

         碰撞:0 傳送佇列長度:0

         接收位元組:48008 (48.0 KB)  傳送位元組:48008(48.0 KB)

設定電腦的乙太網網絡卡,設定成靜態ip


現在就可以用虛擬機器和電腦主機互ping一下,看看通不通

[email protected]:~/work/rootfs$ ping192.168.3.30

PING 192.168.3.30 (192.168.3.30) 56(84)bytes of data.

64 bytes from 192.168.3.30: icmp_seq=1ttl=64 time=5.70 ms

64 bytes from 192.168.3.30: icmp_seq=2ttl=64 time=0.448 ms

64 bytes from 192.168.3.30: icmp_seq=3ttl=64 time=0.474 ms

我已經將電腦主機的防火牆都關掉了,不關掉的時候我也能ping通,如果沒ping通就把電腦防火牆關掉再試試吧。

接下來是設定開發板的ip,復位開發板,進入uboot命令列模式下

設定的引數的命令

liudijiang # setenv gatewayip 192.168.3.1

還有ip地址,掩碼也是一樣設定,伺服器ip設不設定都行

設定bootargs

liudijiang # setenv bootargs root=/dev/nfs nfsroot=192.168.3.27:/home/liudijiang/work/rootfs/ ip=192.168.3.123:192.168.3.27:192.168.3.1:255.255.255.0::eth0:off init=/linuxrcconsole=ttySAC0 lcd=S70

設定bootcmd

setenv bootcmd ‘movi read kernel 040008000;movi read rootfs 0 41000000 100000;bootm 40008000 41000000’

檢視結果

liudijiang # pri

baudrate=115200

bootargs=noinitrd root=/dev/nfs nfsroot=192.168.3.27:/home/liudijiang/work/rootfs/ ip=192.168.3.123:192.168.3.27:192.168.3.1:255.255.255.0::eth0:off init=/linuxrcconsole=ttySAC0 lcd=S70

bootcmd=movi read kernel 0 40008000;moviread rootfs 0 41000000 100000;bootm 40008000 41000000

bootdelay=3

ethaddr=00:40:5c:26:0a:5b

gatewayip=192.168.3.1

ipaddr=192.168.3.123

netmask=255.255.255.0

serverip=192.168.3.30

和NFS有關的選項:

root=/dev/nfs     --使用NFS這個裝置

NFS資料夾具體的路徑

nfsroot=192.168.3.27:/home/liudijiang/work/rootfs ip=192.168.3.123:192.168.3.27:192.168.3.1:255.255.255.0::eth0:off

格式說明:

nfsroot=虛擬機器Linux系統IP:根檔案系統絕對路徑 ip=開發板IP:虛擬機器Linux系統IP:閘道器:子網掩碼::開發板的網絡卡裝置名(一般是eth0,不是虛擬機器):off

以上配置的結果,電腦主機、虛擬機器、開發板都在192.168.3這個網段,其他網段也行。。。重新啟動後會發現已經掛載到ubuntu的那個目錄下了,而且ping一下。。。能掛載上,肯定能ping通了。。。



而且我在Xshell裡已經能進入開發板linux的命令行了

在tmp目錄下新建個hello.c,這個當然是在ubuntu上用vim方便啦,然後順便編譯一下。我已經寫好了,內容如下

[email protected]:~/work/rootfs/tmp$ cat hello.c

#include <stdio.h>

void main(void)

{

printf("hellolinux!\r\n");

}

[email protected]:~/work/rootfs/tmp$arm-linux-gcc -o hello hello.c

[email protected]:~/work/rootfs/tmp$ ls

hello  hello.c

因為是要在開發板上執行,所以是arm-linux-gcc


已經ok了。。。

然而在ubuntu下執行這個hello是不可執行的,因為ubuntu是x86,得gcc編譯才可以執行。

相關推薦

tiny4412 busybox製作檔案系統rootfs nfs 掛載 ubuntu 14.04

首先得要有製作好的uboot和linux核心映象zImage,先燒錄到sd卡里,這個是已經做好了的工作。 一,ubuntu上先設定好nfs服務 1.新建一個要掛載的檔案 [email protected]:~/share$ pwd /home/liudijian

debian9安裝busybox,並製作檔案系統(2)

3,製作根檔案系統 在上文debian9安裝busybox,並製作根檔案系統(1)中輸入make install命令進行安裝,busybox會自動將rootfs根檔案系統安裝到之前設定的目錄下,之前我設定的是/home/guoyanzhang/rootfs,進入之後, ##ls -l drw

debian9安裝busybox,並製作檔案系統(1)

1,構建根檔案目錄 ##mkdir rootfs ##mkdir root home bin sbin etc dev usr lib tmp mnt sys proc ##mkdir usr/lib usr/bin 2,安裝busybox 2.1,下載busybox安裝包,https

利用busybox和mkfs.jffs2製作檔案系統

PC機系統:Ubuntu 12.04 LTS 目標板:海思3518C Flash型別:SPI Flash(16M) Busybox:BusyBox-1.16.1.tgz 嵌入式交叉編譯工具鏈:arm-hisiv100nptl-linux-gcc 目標

最新busybox-1.28.1製作檔案系統

本文適配fs4412開發板,使用的核心為linux4.9.9。 1.原始碼下載 Busybox的官方原始碼下載路徑為: http://busybox.net/downloads/ 可以下載最新的busybox-1.28.1 2.解壓原始碼 tar

mini6410基於linux2.6.36核心通過NFS啟動檔案系統總結(四製作檔案系統及通過NFS掛載檔案系統

本系列文章有本人yinjiabin製作,轉載請註明出處: http://blog.csdn.net/yinjiabin/article/details/7489563根檔案系統一般包括: 1)基本的檔案系統結構,包含一些必須的目錄,比如:/dev,/proc,/bin,/

使用NFS啟動Tiny4412開發板檔案系統

轉載地址: https://www.cnblogs.com/AP0904225/p/6701442.html 1、Ubuntu14.04上搭建NFS服務 1.1、安裝NFS服務          $ sudo ap

openwrt的編譯系統是如何製作檔案系統

答:分析以下makefile即可獲取整個過程 以nxp layerscape系統的編譯過程為例 1.分析target/linux/layerscape/image/Makefile的最後一句,這是一個好的開端 $(eval $(call BuildImage))   2.巨集Bu

移植核心學習筆記2-----修改分割槽及製作檔案系統

1、製作分割槽 (1)分析 在上節實驗中出現以下問題:無法掛載根檔案系統 在以前u-boot燒寫檔案系統時是燒寫到某個地方,以前的分割槽是下面那樣劃分的,劃分為4個分割槽,但是上面有8個分割槽 分割槽修改參考(分割槽是在程式碼裡面寫死的,u-boot怎麼設定不會影響核心

從讀手冊開始讓zynq板卡跑起linux(二)----利用initrd和initramfs分別製作檔案系統

1.initrd 與 initramfs的區別 Linux核心在初始化之後會執行init程序,而init程序會掛載我們的根檔案系統,但由於init程式也是在根檔案系統上的,所以這就有了悖論。Linux採用兩步走的方法來解決這個問題。Linux2.6版以前的方法是:除了核心v

Linux_Hi3518E開發_製作檔案系統映象

開篇廢話     之前看《Linux開發環境使用者指南》的時候沒看仔細,沒有看到檔案系統映象製作的介紹,今天終於製作成功了,特地記錄下製作的過程,便於以後回顧,本文只介紹JFFS2格式檔案系統映象的製作。 根檔案系統簡介     Linux的目錄結構的最頂層是一個被稱為

Buildroot製作檔案系統過程(基於MYD-AM335X開發板)

buildroot的功能很強大,可以利用它製作交叉編譯工具鏈、根檔案系統,甚至可以構建多種嵌入式平臺的bootloader、linux。下面以米爾科技的MYD-AM335X平臺為例展示如何利用buildroot製作自己所需的根檔案系統。一、到官網下載原始碼:http://b

busybox製作Linux檔案系統製作過程詳解

    Linux 檔案系統簡介 Linux支援多種檔案系統,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,為了對各類檔案系統進行統一管理,Linux引入了虛擬檔案系統VFS(Virtual File System),為各類檔案

一步步製作檔案系統 (一)

                            開發環境:Ubuntu 12.04                             開發板:mini2440  256M NandFlash   64M SDRAM                              交叉編譯器:arm-

製作檔案系統debian9

首先你先新建一個用於mount的目錄 mkdir /debian9 其次你需要保證主機上有 debootstrap 以及 qemu-user-static apt-get -y install debootstrap qemu-user-static 現在你需要dd命令去生

核心kernel、檔案系統rootfs如何對映到對應的nand flash

核心kernel以及根檔案系統rootfs是如何對映到對應的nand flash的地址的 【解答】核心kernel以及根檔案系統rootfs是如何對映到對應的nand flash的地址的 【某人問題 核心在啟動的過程中,是如何完成將本地的flash裝置對映成檔案系統的?

熊貓豬新系統測試之四:Ubuntu 14.04

快捷 ubunt 博客 簡單的 paint 執行 易用 linux操作系統 linux下 眼下貓豬在辦公室一般用的就是烏班圖系統,一方面原因是老本本性能跑不起來Windows,更重要的是本貓認為Linux系統更開放些.況且如今用的也比較熟了,全然能夠脫離Wi

基於busybox製作mini2440檔案系統及使用nfs掛載

  常見的檔案系統有yaffs2, jffs2,他們是適用於根檔案系統映象存在於NAND Flash上的情況。而傳統的Linux EXT2/EXT3檔案系統格式適用於傳統的block裝置,比如SD卡或者硬碟。 cramfs同時適用於以上兩種情況。其不管採用哪種格式,核心都必

Tiny4412 ARM開發環境搭建—NFS網路檔案系統製作

Tiny4412從SD卡啟動的簡單網路檔案系統製作 1. 簡介 嵌入式系統能夠在開發板上正常執行,需要先進行系統配置,一個完整的嵌入式系統應該包含的幾個部分::uboot,kernel,rootfs,appfs。這幾部分在ARM板Flash上的位置關係

busybox製作最小檔案系統

接上篇,qemu啟動linux核心 ,啟動核心失敗後,開始製作一個最小的ramdisk根檔案系統。 根檔案系統製作工具busybox,還是走大眾路線吧。原始碼包下載地址:https://busybox.net/ 直接進入busybox的根目錄,準備編譯,使用預設配置檔案defconfig,