1. 程式人生 > >[嵌入式開發入門]4412開發板從零建立Linux最小系統

[嵌入式開發入門]4412開發板從零建立Linux最小系統

iTOP-4412開發板不僅可以執行Android,還可以執行簡單的Linux最小檔案系統。

最小Linux 系統“麻雀雖小,五臟俱全”,它不帶圖形介面的Linux 系統,剔除干擾因素便於理解,用來學習Linux系統程式設計非常合適。

另外,Linux最小系統佔用的記憶體空間很小,也經常用於不帶圖形介面的專案。

1. 最小Linux系統簡介

製作檔案系統需要使用到Busybox工具。

BusyBox是一個集成了一百多個最常用Linux命令和工具的軟體。BusyBox 包含了一些簡單的工具,例如ls、cat和echo等等,還包含了一些更大、更復雜的工具,例grep、find、mount以及telnet。有些人將 BusyBox 稱為 Linux 工具裡的瑞士軍刀。簡單的說BusyBox就好像是個大工具箱,它整合壓縮了 Linux 的許多工具和命令,也包含了Linux系統的自帶的shell。

Busybox的下載網址是http://www.busybox.net/,這是一個開源的程式,並且一直在更新中,這裡使用的版本是busybox-1.21.1.tar.bz2。

2. 配置最小系統

在虛擬機器的Ubuntu的目錄“/home”下新建目錄“mkdir minilinux”,這個目錄可以根據個人習慣建立,並不是強制要求。

拷貝busybox-1.21.1.tar.bz2(這個軟體在對應的實驗視訊目錄檔案下)到虛擬機器的Ubuntu系統上的目錄“/home/minilinux”下,然後在目錄“/home/minilinux”下,執行解壓命令“tar -xvf busybox-1.21.1.tar.bz2”解壓,進入解壓出的busybox-1.22.1目錄中。

Busybox的編譯配置和Linux核心編譯配置使用的命令是一樣的,下面配置Busybox,如下圖所示,使用命令“make menuconfig”,會出現Busybox的配置介面,如下圖所示。

選中Busybox Settings,進入到Busybox Settings介面。

接著進入Build Optiions-> Cross Compiler prefix配置介面,它是指定用什麼編譯器來編譯,輸入使用的交叉編譯工具“arm-none-linux-gnueabi-”。

然後回到Busybox Settings設定介面,進入Installation Options配置介面,選中BusyBox installation prefix,然後進入BusyBox installation prefix配置介面(這個介面是設定編譯完Busybox,把最終生成的二進位制檔案安裝到哪個目錄下面)。

刪除裡面預設的./_install,然後輸入“../system”(最終生成的二進位制檔案會安裝到當前目錄的上一級目錄下的system目錄裡面)。

退出menuconfig配置介面,儲存配置。

3. 編譯和安裝

Busybox的配置已經完成了,接下來編譯Busybox,在Ubuntu的終端輸入make命令開始編譯Busybox。

編譯完成之後,需要把編譯生成的二進位制檔案安裝到剛才指定的../system目錄裡面,使用命令“make install”安裝二進位制檔案到“../system”目錄。開啟“../system”目錄,可以看到安裝的檔案,如下圖所示。

 

4. 完善最小系統

本節介紹如何新增最小系統需要的網路檔案、使用者檔案、庫等。

在system目錄下,使用命令“mkdir dev etc lib mnt proc sys tmp var”建立資料夾。

進入到剛才建立的etc資料夾,在etc目錄下建立eth0-setting檔案,並在eth0-setting檔案裡輸入下面的內容,儲存之後修改許可權位755。

IP=192.168.1.230

Mask=255.255.255.0

Gateway=192.168.1.1

DNS=192.168.1.1

MAC=08:90:90:90:90:90

在etc目錄下建立init.d資料夾,進入到init.d資料夾,在init.d資料夾下建立ifconfig-eth0檔案,然後在ifconfig-eth0檔案輸入下面的內容。儲存並退出,修改 ifconfig-eth0檔案的許可權位755。

#!/bin/sh

echo -n Try to bring eth0 interface up......>/dev/ttySAC2

if [ -f /etc/eth0-setting ] ; then

        source /etc/eth0-setting

        if grep -q "^/dev/root / nfs " /etc/mtab ; then

                echo -n NFS root ... > /dev/ttySAC2

        else

                ifconfig eth0 down

                ifconfig eth0 hw ether $MAC

                ifconfig eth0 $IP netmask $Mask up

                route add default gw $Gateway

        fi

        echo nameserver $DNS > /etc/resolv.conf

else

        if grep -q "^/dev/root / nfs " /etc/mtab ; then

                echo -n NFS root ... > /dev/ttySAC2

        else

        /sbin/ifconfig eth0 192.168.253.12 netmask 255.255.255.0 up

        fi

fi

echo Done > /dev/ttySAC2

然後在init.d資料夾下建立rcS檔案,在rcS檔案輸入下面的內容,儲存並退出rcS,修改rcS的許可權為755。

#! /bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel

#

#       Trap CTRL-C &c only in this shell so we can interrupt subprocesses.

#

trap ":" INT QUIT TSTP

/bin/hostname iTOP-4412

#/bin/mount -n -t proc none /proc

#/bin/mount -n -t sysfs none /sys

#/bin/mount -n -t usbfs none /proc/bus/usb

#/bin/mount -t ramfs none /dev

[ -e /proc/1 ]    || /bin/mount -n -t proc  none /proc

[ -e /sys/class ] || /bin/mount -n -t sysfs none /sys

[ -e /dev/tty ]   || /bin/mount    -t ramfs none /dev

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

/sbin/mdev -s

#/bin/hotplug

# mounting file system specified in /etc/fstab

mkdir -p /dev/pts

mkdir -p /dev/shm

/bin/mount -n -t devpts none /dev/pts -o mode=0622

/bin/mount -n -t tmpfs tmpfs /dev/shm

#/bin/mount -n -t ramfs none /tmp

#/bin/mount -n -t ramfs none /var

mkdir -p /var/empty

mkdir -p /var/log

mkdir -p /var/log/boa

mkdir -p /var/lock

mkdir -p /var/run

mkdir -p /var/tmp

ln -sf /dev/ttyS2 /dev/tty2

ln -sf /dev/ttyS2 /dev/tty3

ln -sf /dev/ttyS2 /dev/tty4

syslogd

/etc/rc.d/init.d/netd start

echo "                        " > /dev/tty1

echo "Starting networking..." > /dev/tty1

#sleep 1

#/etc/rc.d/init.d/httpd start

#echo "                        " > /dev/tty1

#echo "Starting web server..." > /dev/tty1

#sleep 1

#/etc/rc.d/init.d/leds start

#echo "                        " > /dev/tty1

#echo "Starting leds service..." > /dev/tty1

#echo "                        "

#sleep 1

#echo "*************************************" > /dev/ttySAC2

#echo "     http://www.topeet.com.cn        " > /dev/ttySAC2

#echo "*************************************" > /dev/ttySAC2

#echo "*************************************" 

#echo "     http://www.topeet.com.cn        " 

#echo "*************************************" 

mkdir /mnt/disk

sleep 1

/sbin/ifconfig lo 127.0.0.1

/etc/init.d/ifconfig-eth0

返回到init.d的上一級目錄etc,接下來在etc目錄下建立檔案passwd,如下圖所示,儲存並退出,修改passwd的許可權為755。

root::0:0:root:/:/bin/sh

bin:*:1:1:bin:/bin:

daemon:*:2:2:daemon:/sbin:

nobody:*:99:99:Nobody:/:

然後在etc目錄建立profile檔案,在profile輸入下面的內容,儲存並退出,修改profile的許可權為755。

# Ash profile 

# vim: syntax=sh

# No core files by default

ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"

LOGNAME=$USER

PS1='[[email protected]$HOSTNAME]# '

PATH=$PATH

HOSTNAME=`/bin/hostname`

export USER LOGNAME PS1 PATH

接下來在etc目錄建立資料夾rc.d,進入到剛才建立的rc.d資料夾。在rc.d目錄下建立init.d資料夾,進入到建立的init.d資料夾。接著在init.d資料夾,建立netd檔案,在netd檔案裡面輸入下面的內容。儲存並退出netd,修改netd的許可權為755。

#!/bin/sh

base=inetd

# See how we were called.

case "$1" in

  start)

                /usr/sbin/$base

        ;;

  stop)

        pid=`/bin/pidof $base`

        if [ -n "$pid" ]; then

                kill -9 $pid

        fi

        ;;

esac

exit 0

進入system/lib目錄。因為使用的交叉編譯環境和編譯核心的相同,所以編譯器是/usr/local/arm/arm-2009q3,Busybox編譯生成的二進位制檔案十一動態連結庫的形式執行,所以需要拷貝編譯器裡面的庫檔案到lib目錄,使用命令

“cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/* ./”拷貝。

庫檔案拷貝完成後,返回到system/var目錄,在var目錄下建立lib,lock,log,run,tmp五個目錄。至此,檔案系統所需要的檔案都已經建立好了。

5. 安裝打包軟體和編譯

打包工具make_ext4fs可以檔案系統製作成二進位制檔案,先來安裝一下make_ext4fs工具。

拷貝壓縮包“linux_tools.tgz”到Ubuntu 系統的“/”目錄下然後解壓,注意目錄是“/”,如果前面在編譯QtE的時候已經解壓過了,這裡可以跳過去。安裝好打包編譯工具“make_ext4fs”之後。

使用命令進入目錄“/home/minilinux/”,使用命令

“make_ext4fs -s -l 314572800 -a root -L linux system.img system”生成system.img檔案系統映象,如下圖所示。

 

現在已經完成了Linux檔案系統的製作。

6. 最小Linux系統的燒寫

最後需要把製作好的system.img燒寫到iTOP-4412開發板上,燒寫的方式和Android檔案系統的燒寫一樣。

Uboot檔案不用燒寫,是通用的,核心zImage和ramdisk-uboot.img檔案使用QtE的即可。

相關推薦

[嵌入式開發入門]4412開發建立Linux系統

iTOP-4412開發板不僅可以執行Android,還可以執行簡單的Linux最小檔案系統。 最小Linux 系統“麻雀雖小,五臟俱全”,它不帶圖形介面的Linux 系統,剔除干擾因素便於理解,用來學習Linux系統程式設計非常合適。 另外,Linux最小系統佔用的

#嵌入式Linux系統移植# yaffs2根檔案系統移植出錯記錄

busybox官網地址: 本次移植採用的busybox版本: busybox-1.26.0.tar.bz2 交叉編譯工具鏈版本: $ arm-linux-gcc -v gcc version 4.4.3 (ctng-1.6.1) 1

#嵌入式Linux系統移植# 對uboot移植和裁剪的一點點個人思考和總結

思路: 1.分析啟動流程 2.移植config檔案(smdk440_config) 3.移植包含控制條件編譯巨集的.h檔案(configs/s3c2440.h) 4.移植板級初始化.c檔案(s3c2440.c) 5.移植RAM初始化?DDR? 6.移植NorF

linux系統的製作(嵌入式第一節課)

準備工作 硬體工具: 電腦(安裝了linux虛擬機器(UBuntu或者CentOS),需要提供一個平臺環境) 一塊板子(我這裡是使用訊為提供的Cortex-A9 4412精英板) 軟體工具:

【 專欄 】- 手把手教你實現Linux裝置驅動程式(基於友善之臂4412開發)

手把手教你從零實現Linux裝置驅動程式(基於友善之臂4412開發板) ARM-tiny4412這款CPU是基於ARMv7架構的晶片,目前在網上開發現成資源較少,為了彌補這一缺陷,本人決定將我所學所用的這塊晶片的開發技巧和方法共享

Vue2.5開發去哪兒網App 基礎入門到實戰項目

eset 通過 計算 拆分 lan 修復 周末 模塊 blank 第1章 課程介紹本章主要介紹課程的知識大綱,學習前提,講授方式及預期收獲。第2章 Vue 起步本章將快速講解部分 Vue 基礎語法,通過 TodoList 功能的編寫,在熟悉基礎語法的基礎上,擴展解析 MVV

React16.4 開發簡書項目 基礎入門到實戰

ref 什麽 參數 開發環境搭建 mut 搜索 react conf router 第1章 課程導學本章主要介紹學習react的重要性,課程的知識大綱,學習前提,講授方式及預期收獲。1-1 課程導學 第2章 React初探本章主要講解React項目的開發環境搭建,工程代碼結

Vue2.5開發去哪兒網App 基礎入門到實戰項目

基礎配置 可能 lan 第2章 方式 路由 表單 加載 基礎入門 第1章 課程介紹本章主要介紹課程的知識大綱,學習前提,講授方式及預期收獲。1-1 課程簡介 第2章 Vue 起步本章將快速講解部分 Vue 基礎語法,通過 TodoList 功能的編寫,在熟悉基礎語法的基礎上

Vue2.5開發去哪兒網App 基礎入門到實戰專案最新無密

  第1章 課程介紹本章主要介紹課程的知識大綱,學習前提,講授方式及預期收穫。1-1 課程簡介第2章 Vue 起步本章將快速講解部分 Vue 基礎語法,通過 TodoList 功能的編寫,在熟悉基礎語法的基礎上,擴充套件解析 MVVM 模式及前端元件化的概念及優勢。2-1 課程學

2018最新 Vue2.5開發去哪兒網App+基礎入門到實戰

第1章 課程介紹本章主要介紹課程的知識大綱,學習前提,講授方式及預期收穫。1-1 課程簡介第2章 Vue 起步本章將快速講解部分 Vue 基礎語法,通過 TodoList 功能的編寫,在熟悉基礎語法的基礎上,擴充套件解析 MVVM 模式及前端元件化的概念及優勢。2-1 課程學習方法2-2 he

Vue2.5開發去哪兒網App 基礎入門到實戰專案

第1章 課程介紹本章主要介紹課程的知識大綱,學習前提,講授方式及預期收穫。1-1 課程簡介第2章 Vue 起步本章將快速講解部分 Vue 基礎語法,通過 TodoList 功能的編寫,在熟悉基礎語法的基礎上,擴充套件解析 MVVM 模式及前端元件化的概念及優勢。2-1 課

Vue2.5開發去哪兒網App 基礎入門到實戰專案完整版

第1章 課程介紹本章主要介紹課程的知識大綱,學習前提,講授方式及預期收穫。1-1 課程簡介第2章 Vue 起步本章將快速講解部分 Vue 基礎語法,通過 TodoList 功能的編寫,在熟悉基礎語法的基礎上,擴充套件解析 MVVM 模式及前端元件化的概念及優勢。2-1 課

Vue2.5開發去哪兒網App基礎入門到實戰專案

完整版 請聯絡QQ 8960531 第1章 課程介紹 本章主要介紹課程的知識大綱,學習前提,講授方式及預期收穫。 第2章 Vue 起步 本章將快速講解部分 Vue 基礎語法,通過 TodoList 功能的編寫,在熟悉基礎語法的基礎上,擴充套件解析 MVVM 模式

Vue2.5開發去哪兒網App 基礎入門到實戰專案百度網盤免費下載

Vue2.5開發去哪兒網App 從零基礎入門到實戰專案百度網盤免費下載 2018最新Vue2.5零基礎入門到專案實戰開發旅遊網站App課程視訊教程下載。本課程從理論到專案,涵蓋Vue各個層面的基礎知識和開發技巧。從Vue基礎語法入手,逐層遞進,實戰專案貼近企業流程,完全按照企業級別程式碼質量和工程開發流程進

Vue2.5開發去哪兒網App 基礎入門到實戰專案無加密分享

第1章 課程介紹本章主要介紹課程的知識大綱,學習前提,講授方式及預期收穫。1-1 課程簡介第2章 Vue 起步本章將快速講解部分 Vue 基礎語法,通過 TodoList 功能的編寫,在熟悉基礎語法的基礎上,擴充套件解析 MVVM 模式及前端元件化的概念及優勢。2-1 課

openwrt MT7688開發 教程

資料百度雲盤:稍後 通用環境搭建介紹 1. 通用環境搭建 1.1 開發環境介紹 Openwrt 可以在大部分的linux 系統上面編譯,包括市面上常用的Ubuntu、Redhat、 Debian、Fedora 等,這裡介紹window

新手入門寶典:開始做微信程式開發

微信小程式聯盟出品.jpg 開發前必讀簡要 基於大量無效開發,無法上線的案例,所以開發前部分知識十分重要;| 連結 微信小程式個人註冊簡單步驟 開啟mp.weixin.qq.com,點選右上角立即註冊,進入小程式註冊| 連結 微信開發者工具【專案】詳解 為什麼我的小程式通過稽核,但是搜

kotlin web開發教程【一】搭建kotlin與spring boot開發環境

1.8 jre cond utf8 erro 2.0 .com 就會 一個tomcat IDEA中文輸入法的智能提示框不會跟隨光標的問題我用的開發工具是IDEA這個版本的IDEA有一個問題;就是中文輸入法的智能提示框不會跟隨光標解決這個問題的辦法很簡單,只有在安裝目錄下把J

android——kotlin開發入門開發環境搭建

style blog extension activity image plugins 重要 打開 對話框 一.打開android studio—Setting—Plugins 註意,第一次是搜索不到的,會彈出一個對話框,在對話框中輸入Kotlin,選中第二個。在右邊點擊

spring boot + vue + element-ui全棧開發入門——windows開發環境

vue-cli 1.4 www mod build bsp pri get brush 一、node.js開發環境 windows系統,去網站https://nodejs.org/en/download/,下載對應的安裝程序,並安裝Windows Instal