環(huán)境準(zhǔn)備 forum.cubietech.com 1 環(huán)境準(zhǔn)備 本文在一臺運行著 Lubuntu64-12.10 上開始構(gòu)建目標(biāo)系統(tǒng);若非特別說明,下文的構(gòu)建方法適用 Cubieboard1、 Cubieboard2 以及 Cubieboard3,您必須明確自己使用的板子類型,并選擇相對應(yīng)的構(gòu)建方法。為了最大限度地 節(jié)約時間,我們先把必須下載的東西下載好,然后再進(jìn)一步闡釋;要下載的內(nèi)容分為三部分,這三部分彼此不干擾, 所以可以同時進(jìn)行。我們用 root 用戶在指定的目錄下進(jìn)行所有操作: · 工作目錄為 $WORK_DIR · 目標(biāo)系統(tǒng) rootfs 目錄為 $ROOTFS_DIR 筆者的設(shè)定如下: # WORK_DIR=/home/soloforce/develop/cubieboard # ROOTFS_DIR=${WORK_DIR}/chroot-armhf 此外,本文用陰影區(qū)域代表命令或文件內(nèi)容;因為頁幅限制,有的行末尾有"\" 折行符,表示該行尚未結(jié)束,在下一 行繼續(xù)——所以折行符不算是命令或文件內(nèi)容的一部分。此外,本文中用到的命令或代碼、腳本片段雖然用拷貝、粘 貼的方式更省事,但切記一些關(guān)鍵的文字不能照搬照抄,比如設(shè)備名,如''/dev/sdc'' 之類的,請務(wù)必根據(jù)實際情況 做修改,以免造成不可回復(fù)的損失。 1.1 下載必須的工具軟件 # apt-get install build-essential libncurses5-dev u-boot-tools \ qemu-user-static debootstrap git binfmt-support libusb-1.0-0-dev pkg-config # apt-get install gcc-arm-linux-gnueabihf 1.2 下載源碼 從 github 下載 spl&u-boot、內(nèi)核源碼、sunxi 工具包等。注意內(nèi)核源碼超過 1.5G,耗時最長。如果您曾經(jīng)下載過 這些代碼,記得分別用 git pull 更新后再進(jìn)行后續(xù)操作,因為代碼倉庫每天都有變化。 # # # # cd ${WORK_DIR} git clone https://github.com/cubieboard/u-boot-sunxi.git -b cubie/sunxi git clone https://github.com/cubieboard/sunxi-tools.git git clone https://github.com/cubieboard/sunxi-boards.git 下載下載內(nèi)核源碼,現(xiàn)在 Cubieboard1, Cubieboard2, Cubieboard3 的內(nèi)核源碼都可以在 cubieboard 內(nèi)核源 碼倉庫上找到了。以 sunxi-3.4 穩(wěn)定版本的分支為例,用 git 下載到本地。 # git clone https://github.com/cubieboard/linux-sunxi.git -b cubie/sunxi-3.4 3soloforce 環(huán)境準(zhǔn)備 forum.cubietech.com 1.3 下載并配置 Debian 基礎(chǔ)系統(tǒng) # # # # # # mkdir ${ROOTFS_DIR} cd ${ROOTFS_DIR} debootstrap --foreign --arch armhf wheezy . cp /usr/bin/qemu-arm-static usr/bin/ LC_ALL=C LANGUAGE=C LANG=C chroot . /debootstrap/debootstrap --second-stage LC_ALL=C LANGUAGE=C LANG=C chroot . dpkg --configure -a 到此為止,Debian 基礎(chǔ)系統(tǒng)已經(jīng)配置好了;現(xiàn)在可以把 $ROOTFS_DIR 保存為一個壓縮包,以備日后之用。 # cd ${ROOTFS_DIR} # tar jcpvf ../debian-rootfs-armhf-clean.tar.bz2 * 4soloforce 編譯組件 forum.cubietech.com 2 編譯組件 2.1 編譯 U-BOOT # cd ${WORK_DIR}/u-boot-sunxi # make distclean CROSS_COMPILE=arm-linux-gnueabihf- 對于 Cubieboard1,這樣編譯 # make cubieboard CROSS_COMPILE=arm-linux-gnueabihf- 對于 Cubieboard2,則這樣編譯 # make cubieboard2 CROSS_COMPILE=arm-linux-gnueabihf- 對于 Cubietruck(Cubieboard3),則這樣編譯 # make cubietruck CROSS_COMPILE=arm-linux-gnueabihf- 2.2 編譯 sunxi-tools sunxi-tools 提供了 fexc、nand-part 等工具,在系統(tǒng)安裝、定制的過程中可能會用到,所以可以先編譯它們。因 為這些工具常常在宿主系統(tǒng)上(x86-64 Ubuntu Linux)來針對目標(biāo)設(shè)備、目標(biāo)系統(tǒng)運行,所以可以把它們編譯為 x86-64 的可執(zhí)行文件。 # cd ${WORK_DIR}/sunxi-tools # make 2.3 配置、編譯內(nèi)核 2.3.1 拷貝預(yù)設(shè)內(nèi)核配置文件 對于 Cubieboard1 # cd ${WORK_DIR}/linux-sunxi # cp arch/arm/configs/sun4i_defconfig .config 5soloforce 編譯組件 forum.cubietech.com 對于 Cubieboard2 和 Cubieboard3, 則如下 # cd ${WORK_DIR}/linux-sunxi # cp arch/arm/configs/sun7i_defconfig .config 2.3.2 配置內(nèi)核 下面開始配置內(nèi)核,這是一個非常冗繁的過程,您必須足夠耐心和仔細(xì);而且,配置一個新的內(nèi)核往往做不到一次性 成功,可能需要多次測試內(nèi)核才能達(dá)到您的目的——還是那句話:要足夠耐心和仔細(xì)! # make ARCH=arm menuconfig 配置的選項很關(guān)鍵,要著重注意以下幾項: · SATA 硬盤支持 · GPIO 支持 · 無線網(wǎng)絡(luò)支持 · USB 網(wǎng)卡支持 · Tun/Tap 設(shè)備支持 · 攝像頭支持 · 紅外線支持 · USB 串口設(shè)備支持 · HDMI 輸出支持 下面是一些筆者為 Cubieboard2 的內(nèi)核進(jìn)行配置的截圖 6soloforce 編譯組件 forum.cubietech.com 圖 1: Device Drivers ---> Serial ATA and Parallel ATA drivers ---> SoftWinner Platform AHCI SATA support 圖 2: Device Drivers ---> GPIO Support ---> GPIO Support for sunxi platform 7soloforce 編譯組件 forum.cubietech.com 圖 3: Networking support ---> Wireless ---> Generic IEEE 802.11 Networking Stack (mac80211) 圖 4: Device Drivers ---> Network device support ---> Wireless LAN ---> Ralink driver support 8soloforce 編譯組件 forum.cubietech.com 圖 5: Device Drivers ---> Network device support ---> Universal TUN/TAP device driver support 圖 6: Device Drivers ---> Multimedia support ---> Video capture adapters ---> V4L USB devices ---> USB Video Class (UVC) 9soloforce 編譯組件 forum.cubietech.com 圖 7: Device Drivers ---> Input device support ---> Keyboards ---> sunxi IR support 圖 8: Device Drivers ---> USB support ---> USB Serial Converter support ---> USB Prolific 2303 Single Port Serial Driver 10soloforce 編譯組件 forum.cubietech.com 圖 9: Device Drivers ---> Graphics support ---> Support for frame buffer devices ---> HDMI Driver Support(sunxi) 2.3.3 編譯內(nèi)核 現(xiàn)在可以開始編譯內(nèi)核及模塊了 # make -j5 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules 2.3.4 發(fā)掘更多的可用內(nèi)存 Cubieboard 的默認(rèn)內(nèi)核配置文件中提供了 mali-GPU 支持,并為 X11、DRI、Framebuffer 保留了 200 多兆內(nèi) 存,這些內(nèi)存將無法被用戶使用;如果想把 Cubieboard 作為一個無顯示輸出的服務(wù)器使用,那么這些保留內(nèi)存應(yīng) 當(dāng)釋放出來供用戶使用,此時必須修改內(nèi)核的配置,使其中包含如下選項(修改時可在 menuconfig 中按'/' 鍵來搜 索相關(guān)選項) ,然后再重新編譯內(nèi)核: CONFIG_SUN4I_G2D=n CONFIG_FB_SUNXI_RESERVED_MEM=n CONFIG_SUN4I_G2D_MODULE=n CONFIG_FB_SUNXI_RESERVED_MEM=n CONFIG_SUNXI_MALI_RESERVED_MEM=n CONFIG_DRM_MALI=n CONFIG_MALI=n CONFIG_MALI400=n 11soloforce 建立 ROOTFS forum.cubietech.com 3 建立 ROOTFS 除非特別說明,本節(jié)的所有操作都在 $ROOTFS_DIR 下面進(jìn)行,所以我們進(jìn)入該目錄先。首先且最重要的是設(shè)置管 理員密碼。 # cd ${ROOTFS_DIR} # chroot . passwd 3.1 重要步驟 Debian rootfs 基礎(chǔ)系統(tǒng)已經(jīng)在前文下載安裝,現(xiàn)在要進(jìn)一步配置。和主機(jī)名稱: # echo "Cubieboard" > ${ROOTFS_DIR}/etc/hostname # echo "127.0.0.1 Cubieboard" >> ${ROOTFS_DIR}/etc/hosts 內(nèi)核模塊安裝,這是最關(guān)鍵步驟: # cp ${WORK_DIR}/linux-sunxi/arch/arm/boot/uImage ${ROOTFS_DIR}/boot/ # make -C ${WORK_DIR}/linux-sunxi INSTALL_MOD_PATH=${ROOTFS_DIR} ARCH=arm \ CROSS_COMPILE=arm-linux-gnueabihf- modules_install 設(shè)置串口調(diào)試終端參數(shù),這也是很重要的哦: # echo T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt100 >> etc/inittab 配置并更新軟件源: # # # # echo deb http://http./debian/ wheezy main contrib non-free > etc/apt/sources.list echo deb http://security./ wheezy/updates main contrib non-free >> etc/apt/sources.list chroot . apt-get update chroot . apt-get upgrade 3.2 可選步驟 安裝 Open SSH Server 12soloforce 建立 ROOTFS forum.cubietech.com # chroot . apt-get install openssh-server 安裝 locales # # # # chroot . apt-get install locales echo "en_US.UTF-8 UTF-8" > etc/locale.gen echo "zh_CN.UTF-8 UTF-8" >> etc/locale.gen chroot . locale-gen 您 還 可 以 依 樣 安 裝 其 他 軟 件, 比 如 wifi tools、wpasupplicant、USB 無 線 網(wǎng) 卡 的 固 件 (本 人 用 的 是 巴 法 絡(luò) (BUFFALO)WLI-UC-GNM NANO 迷你無線網(wǎng)卡,一款 mini 型支持軟 AP 的 USB 無線網(wǎng)卡) # chroot . apt-get install wireless-tools wpasupplicant firmware-ralink 3.3 生成內(nèi)核啟動參數(shù)文件 Cubieboard 支持多種啟動參數(shù)設(shè)定方案,本文介紹兩種。筆者采用的是方案二,因為修改參數(shù)更為簡便:-) · 方案一:利用 boot.scr。 編輯 $ROOTFS_DIR/boot/boot.cmd 如下(切記具體內(nèi)容要根據(jù)用戶實際情況而定,如 root 分區(qū)的位置設(shè)定) : setenv bootargs console=ttyS0,115200 hdmi.audio=EDID:0 disp.screen0_output_mode=EDID:1280x1024p60 \ root=/dev/mmcblk0p1 rootwait panic=10 ${extra} ext2load mmc 0 0x43000000 boot/script.bin ext2load mmc 0 0x48000000 boot/uImage bootm 0x48000000 然后生成 boot.scr # mkimage -C none -A arm -T script -d boot/boot.cmd boot/boot.scr · 方案二:利用 uEnv.txt 我們也可以用 uEnv.txt 文件設(shè)定啟動參數(shù)——不再需要 boot.scr 文件了, 刪除之。 編輯 $ROOTFS_DIR/boot/uEnv.txt (沒有就創(chuàng)建一個,切記具體內(nèi)容要根據(jù)用戶實際情況而定,如 root 分區(qū)的位置) 13soloforce 建立 ROOTFS forum.cubietech.com mmcboot=fatload mmc 0 0x43000000 script.bin || fatload mmc 0 0x43000000 evb.bin; \ fatload mmc 0 0x48000000 uImage; if fatload mmc 0 0x43100000 uInitrd; \ then bootm 0x48000000 0x43100000; else bootm 0x48000000; fi uenvcmd=run mmcboot bootargs=console=ttyS0,115200 console=tty0 disp.screen0_output_mode=EDID:1280x1024p50 \ hdmi.audio=EDID:0 root=/dev/mmcblk0p1 3.4 生成 Script.bin 我們先把.fex 文件拷貝到 $ROOTFS_DIR/boot 中。對于 Cubieboard1,如下操作: # cp ${WORK_DIR}/sunxi-boards/sys_config/a10/cubieboard.fex boot/script.fex 對于 Cubieboard2,如下操作: # cp ${WORK_DIR}/sunxi-boards/sys_config/a20/cubieboard2.fex boot/script.fex 對于 CubieTruck,則: # cp ${WORK_DIR}/sunxi-boards/sys_config/a20/cubietruck.fex boot/script.fex 3.4.1 配置 GPIO[可選] 喜歡玩外設(shè)控制的用戶可以在此時配置 GPIO 端口。本文配置了靠近 SATA 口的 30 個可用擴(kuò)展端口:編輯 $ROOTFS_DIR/boot/script.fex,在最后加上如下一節(jié): [gpio_para] gpio_used = 1 gpio_num = 30 gpio_pin_1 = port:PD01<1><default><default><default> gpio_pin_2 = port:PD02<1><default><default><default> gpio_pin_3 = port:PD03<1><default><default><default> gpio_pin_4 = port:PD04<1><default><default><default> gpio_pin_5 = port:PD05<1><default><default><default> gpio_pin_6 = port:PD06<1><default><default><default> gpio_pin_7 = port:PD07<1><default><default><default> gpio_pin_8 = port:PD08<1><default><default><default> gpio_pin_9 = port:PD09<1><default><default><default> gpio_pin_10 = port:PD10<1><default><default><default> 14建立 ROOTFS soloforce gpio_pin_11 gpio_pin_12 gpio_pin_13 gpio_pin_14 gpio_pin_15 gpio_pin_16 gpio_pin_17 gpio_pin_18 gpio_pin_19 gpio_pin_20 gpio_pin_21 gpio_pin_22 gpio_pin_23 gpio_pin_24 gpio_pin_25 gpio_pin_26 gpio_pin_27 gpio_pin_28 gpio_pin_29 gpio_pin_30 3.4.2 = = = = = = = = = = = = = = = = = = = = forum.cubietech.com port:PD11<1><default><default><default> port:PD12<1><default><default><default> port:PD13<1><default><default><default> port:PD14<1><default><default><default> port:PD15<1><default><default><default> port:PD16<1><default><default><default> port:PD17<1><default><default><default> port:PD18<1><default><default><default> port:PD19<1><default><default><default> port:PD20<1><default><default><default> port:PD21<1><default><default><default> port:PD22<1><default><default><default> port:PD23<1><default><default><default> port:PD24<1><default><default><default> port:PD25<1><default><default><default> port:PD26<1><default><default><default> port:PD27<1><default><default><default> port:PH07<1><default><default><default> port:PB10<1><default><default><default> port:PB11<1><default><default><default> 配置 SPI[可選,僅適用于 Cubieboard1] 如果需要 SPI 支持,可以在內(nèi)核選項中選中 SPI for sun 支持。然后再修改 script.fex 并重新生成 script.bin 即 可。編輯 $ROOFS_DIR/boot/script.fex,修改相關(guān)內(nèi)容如下: [spi0_para] spi_used = 1 spi_cs_bitmap = 1 spi_cs0 = port:PI10<2><default><default><default> spi_sclk = port:PI11<2><default><default><default> spi_mosi = port:PI12<2><default><default><default> spi_miso = port:PI13<2><default><default><default> [spi_devices] spi_dev_num = 1 [spi_board0] modalias = "spidev" max_speed_hz = 12000000 bus_num = 0 chip_select = 0 mode = 3 full_duplex = 0 manual_cs = 0 15soloforce 3.4.3 建立 ROOTFS 生成 script.bin 好的,又到關(guān)鍵的一步了,深呼吸一下,鍵入下面的指令: # ${WORK_DIR}/sunxi-tools/fex2bin boot/script.fex boot/script.bin 16 forum.cubietech.comsoloforce 建立 ROOTFS forum.cubietech.com 3.5 設(shè)置網(wǎng)絡(luò) 現(xiàn)在設(shè)置網(wǎng)絡(luò)參數(shù),編輯 etc/network/interfaces,下面的配置是動態(tài)獲取 IP 的設(shè)置 # interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp 下面的配置則是設(shè)定固定 IP 的設(shè)置 auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.0.0.10 netmask 255.255.255.0 network 10.0.0.0 broadcast 10.0.0.255 gateway 10.0.0.1 如果需要設(shè)定無線網(wǎng)卡,可以在追加如下配置(假定無線網(wǎng)卡的設(shè)備名為 wlan0,且系統(tǒng)要安裝軟件包 wireless- tools、wpasupplicant ) auto wlan0 iface wlan0 inet dhcp pre-up ip link set wlan0 up pre-up iwconfig wlan0 essid your-ap-ssid wpa-ssid your-ap-ssid wpa-psk your-ap-passwd 17soloforce 安裝到 TF 卡 forum.cubietech.com 4 安裝到 TF 卡 筆者的 TF 卡設(shè)備名被認(rèn)作/dev/sdc,實際值要視你自己的情況而定,一定要搞清楚 TF 卡對應(yīng)的設(shè)備名,以避免不 必要的損失。 # CARD=/dev/sdc 4.1 安裝 u-boot 清空前面 1M 左右的數(shù)據(jù),為存放 u-boot 預(yù)留空間 # cd ${WORK_DIR}/u-boot-sunxi # dd if=/dev/zero of=$CARD bs=1k count=1024 # dd if=u-boot-sunxi-with-spl.bin of=$CARD bs=1024 seek=8 4.2 介質(zhì)分區(qū) 為 TF 卡分區(qū), 本文沒有用 sfdisk 工具,而是用了 fdisk 工具。分區(qū)有兩種方案: 4.2.1 單一分區(qū)方案 筆者采用的即是單一分區(qū)方案,文件系統(tǒng)格式必須是內(nèi)核支持的格式(即相關(guān)驅(qū)動要編譯進(jìn)內(nèi)核而不是編譯成模塊) , 如 ext3、ext4,執(zhí)行如下操作: # fdisk $CARD ...(進(jìn)行分區(qū)操作)... # mkfs.ext4 ${CARD}1 拷貝整個 ROOTFS 到 TF 卡 # # # # cd ${ROOTFS_DIR} mount ${CARD}1 /mnt tar --exclude=qemu-arm-static -cf - . | tar -C /mnt -xvf - sync && umount /mnt 4.2.2 兩個分區(qū)以上的方案 如果把 TF 卡分成兩個分區(qū)(或兩個以上分區(qū),類同) ,此時最好把第一個分區(qū)格式化為 vfat 格式,否則可能無法啟 動(筆者曾碰到過這樣的情形) ,并且要設(shè)定 $ROOTFS_DIR/etc/fstab 內(nèi)容如下: 18soloforce 安裝到 TF 卡 forum.cubietech.com /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 同時記得修改 $ROOTFS_DIR/boot/uEnv.txt,指定 root 分區(qū)設(shè)備為 mmcblk0p2 bootargs=console=ttyS0,115200 console=tty0 disp.screen0_output_mode=EDID:1280x1024p50 \ hdmi.audio=EDID:0 root=/dev/mmcblk0p2 然后拷貝整個 ROOTFS 到 TF 卡 # # # # # # cd ${ROOTFS_DIR} mount ${CARD}2 /mnt mkdir /mnt/boot mount ${CARD}1 /mnt/boot tar --exclude=qemu-arm-static -cf - . | tar -C /mnt -xvf - sync && umount /mnt/boot && umount /mnt 如果沒有意外的話——您自己動手豐衣足食得到的 Cubieboard Debian Linux TF 卡版本或許已經(jīng)可以運行了,只 是還沒把 TF 卡插到 Cubieboard 上測試而已! 19soloforce Cubietruck 相關(guān) forum.cubietech.com 5 Cubietruck 相關(guān) 5.1 關(guān)于 WIFI Cubietruck 采用 AP6210 的 Bluetooth+WIFI 模塊 (bchdmd),所以在編譯內(nèi)核的時候必須選中以下驅(qū)動: 圖 10: Device Drivers ---> Network device support ---> Wireless LAN ---> Broadcom 4329/30 wireless cards support 還有幾點要注意: 首先, 不要選中 Enable WiFi control function abstraction , 可能是相應(yīng)的功能尚未完善會導(dǎo)致 沖突; 其次, 模塊 bchdmd 依賴的 AP6210 固件默認(rèn)是缺失的, 需要自己拷貝到目標(biāo)系統(tǒng)的/lib/firmware/ap6210/下 面,這些固件可以從官方發(fā)布的 Lubuntu 系統(tǒng) ( http://dl./software/a20-cubietruck/lubuntu/ ) 中拷貝出來;第三,bchdmd 還依賴 gpio-sunxi,必須在內(nèi)核中選中之。 為了在啟動內(nèi)核時自動加載 WIFI 相應(yīng)模塊,可以編輯 /etc/modules,加入如下幾行 gpio_sunxi bchdmd 系統(tǒng)重啟后檢查 /sys/class/net/wlan0 是否成功創(chuàng)建,是的話就可以通過 iwconfig、ifconfig、wpasupplicant 等工具配置無線網(wǎng)卡了。 20安裝到 NAND[可選,僅適用于 Cubieboard1] soloforce forum.cubietech.com 6 安裝到 NAND[可選,僅適用于 Cubieboard1] 一旦確認(rèn) TF 卡上新構(gòu)建的 Debian Linux 系統(tǒng)已經(jīng)處于可用狀態(tài),我們可以進(jìn)一步把這個系統(tǒng)安裝到 Cubieboard 內(nèi)置的 4G Nand Flash 里面,這樣做的好處是......總之有好處。如果您希望繼續(xù)折騰,請堅持看下去——所要做的 事情比想像的要簡單。 作為區(qū)分,"PC#" 表示在構(gòu)建 Cubieboard Debian Linux 系統(tǒng)的 PC 系統(tǒng)中執(zhí)行命令,而"TF_Cubie#" 表示安 裝在 TF 卡的 Cubieboard 系統(tǒng)中執(zhí)行命令。 首先,把前文生成的 ROOTFS 打包 PC# cd ${ROOTFS_DIR} PC# tar jcvpf ../debian-rootfs-armhf.tar.bz2 ./ 然后,下載 Cubieboard 的 Nand Bootloader 映像并安裝之: TF_Cubie# wget https://cubieboard./files/cubie_nand_uboot_partition_image.bin TF_Cubie# dd bs=4096 if=cubie_nand_uboot_partition_image.bin of=/dev/nand 上述命令會把 bootloader 以及 boot 相關(guān)程序?qū)懭?dev/nand 中,并把 nand 分成兩個分區(qū) nanda, nandb。為 了確保寫入成功,重啟一下 Cubieboard。 TF_Cubie# sync TF_Cubie# reboot 等重啟完畢后,就可以對 Nand 進(jìn)行分區(qū)、格式化、掛載等操作了。如果需要重新分區(qū)的話可以用 nand-part 工具, 在 sunxi-tools 里面可以找到,可能要自行編譯。 TF_Cubie# TF_Cubie# TF_Cubie# TF_Cubie# TF_Cubie# mkfs.ext4 /dev/nandb mkdir /mnt/nanda mkdir /mnt/nandb mount /dev/nanda /mnt/nanda mount /dev/nandb /mnt/nandb 把 前 文 生 成 的 debian-rootfs-armhf.tar.bz2,從 PC 上 發(fā) 送到 Cubieboard 并 解 壓 縮 到 nandb 上, 并 拷 貝 script.bin 到 nanda 分區(qū) TF_Cubie# tar jxpvf debian-rootfs-armhf.tar.bz2 -C /mnt/nandb TF_Cubie# cp /mnt/nandb/boot/script.bin /mnt/nanda/ 刪掉不需要的引導(dǎo)文件 21soloforce 安裝到 NAND[可選,僅適用于 Cubieboard1] forum.cubietech.com TF_Cubie# rm /mnt/boot/uEnv.txt 優(yōu)化 fstab,減少 Nand 的擦寫次數(shù),既提速又延長介質(zhì)的使用時間:把下面的指令加入到/mnt/etc/fstab tmpfs tmpfs tmpfs tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 /var/tmp tmpfs defaults,noatime,mode=1777 0 /var/log tmpfs defaults,noatime,mode=0777 0 /var/log/apt tmpfs defaults,noatime 0 0 0 0 注意,上面把/var/log 目錄設(shè)定為 tmpfs,會導(dǎo)致系統(tǒng)及一些應(yīng)用程序的日志無法持久保存,請酌情采用。 卸載文件系統(tǒng),關(guān)閉系統(tǒng)和電源: TF_Cubie# umount /mnt/nanda TF_Cubie# umount /mnt/nandb TF_Cubie# sync && shutdown -h now 然后,拔掉 TF 卡,重開電源,啟動進(jìn)入 Nand 系統(tǒng)! 22創(chuàng)建系統(tǒng)映像 [可選] soloforce forum.cubietech.com 7 創(chuàng)建系統(tǒng)映像 [可選] 分享,是的,分享。如果您想把自己制作的系統(tǒng)分享給朋友們,可以參考本節(jié)。這里沒有給出詳細(xì)的指令說明,請自 行參考相關(guān)資源。 # # # # # # cd ${WORK_DIR} dd if=/dev/zero of=disk.img count=4000000 (此處為2G大小;您可以自行修改) losetup /dev/loop0 disk.img dd if=/dev/zero of=/dev/loop0 bs=1k count=1024 cd ${WORK_DIR}/u-boot-sunxi dd if=u-boot-sunxi-with-spl.bin of=/dev/loop0 bs=1024 seek=8 下面對映像設(shè)備進(jìn)行分區(qū),并檢查一下第一個分區(qū)的偏移是否為 2048 個 block(每個 block 為 512Bytes) # fdisk /dev/loop0 ...分區(qū)動作...這里分兩個區(qū),第一個分區(qū)64MB,第二個分區(qū)占據(jù)所有剩余空間... # fdisk -l /dev/loop0 (查看分區(qū)的偏移量) Disk /dev/loop0: 2048 MB, 2048000000 bytes 255 heads, 63 sectors/track, 248 cylinders, total 4000000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1408d14e Device Boot /dev/loop0p1 /dev/loop0p2 Start 2048 133120 End 133119 3999999 Blocks 65536 1933440 Id 83 83 System Linux Linux 下面就可以把分區(qū)掛載起來,并拷貝系統(tǒng)了 # # # # # # # # # # # # cd ${WORK_DIR} losetup -d /dev/loop0 && losetup /dev/loop0 disk.img (重新關(guān)聯(lián)一次) losetup -o 1048576 /dev/loop1 /dev/loop0 (關(guān)聯(lián)第一分區(qū),1048576=512*2048) losetup -o 68157440 /dev/loop2 /dev/loop0 (關(guān)聯(lián)第二分區(qū),68157440=512*133120) mkfs.vfat /dev/loop1 mkfs.ext4 /dev/loop2 mount /dev/loop2 /mnt mkdir /mnt/boot mount /dev/loop1 /mnt/boot cd ${WORK_DIR}/chroot-armhf tar --exclude=qemu-arm-static -cf - . | tar -C /mnt -xvf - sync && umount /mnt/boot && umount /mnt 23soloforce 創(chuàng)建系統(tǒng)映像 [可選] # losetup -d /dev/loop2 # losetup -d /dev/loop1 # losetup -d /dev/loop0 好了,disk.img 已經(jīng)完成,您可以把它發(fā)布到網(wǎng)上了:-> 如果要安裝到 TF 卡,執(zhí)行: # dd if=disk.img of=$CARD bs=4k 24 forum.cubietech.comsoloforce 接下來做什么 forum.cubietech.com 8 接下來做什么 Cubieboard Debian Linux 的構(gòu)建要告一段落了,拔下讀卡器,拔下 TF 卡,插到 CuebieBoard 上,接上電源 (從 5V 口或者 miniUSB 口接入) ,接上 TTL 串口調(diào)試線,接通電源......然后,祈禱吧;-) 如果看到字符迅速滾動, 最后出現(xiàn)類似 login 的字樣,恭喜您!若看到 panic 之類,然后所有的文字卡死不滾動了,那么,也恭喜您!您有機(jī) 會親手 debug 一下了:-o 當(dāng)然,即使系統(tǒng)已經(jīng)可以啟動了,也可能還沒有達(dá)到您預(yù)期的要求,比如某個內(nèi)核模塊忘記編譯進(jìn)去了導(dǎo)致您 的 USB 網(wǎng)卡或者 USB WIFI 模塊或者藍(lán)牙模塊沒法工作——別急,您可以返回前面的步驟重新配置內(nèi)核、編譯內(nèi) 核、安裝內(nèi)核及模塊......遲早,您的系統(tǒng)在您的手下會越來越好用! 8.1 設(shè)置時區(qū)和日期 # rm /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # date MMDDhhmmyyyy Cubieboard1 和 Cubieboard2 沒有引出 RTC,所以無法通過 hwclock -w 保存系統(tǒng)時間, 解決辦法是通過網(wǎng)絡(luò)來 校正: # apt-get install ntpdate # nano -w /etc/default/ntpdate 更改 ntpdate 文件如下: NTPDATE_USE_NTP_CONF=no NTPSERVERS="0.asia.pool.ntp.org 1.asia.pool.ntp.org 2.asia.pool.ntp.org 3.asia.pool.ntp.org" NTPOPTIONS="" 然后執(zhí)行 # ntpdate-debian 現(xiàn)在設(shè)置開機(jī)啟動 ntpdate, 在/etc/rc.local 文件的 exit 0 這一行之前加入: ntpdate-debian & Cubietruck 引出了 RTC,也有板載時鐘電池,這樣日期設(shè)置的問題就自然解決了。但筆者發(fā)現(xiàn),Cubietruck 的 RTC 精度有限,安裝個 ntpdate 有助于校正時間,還是有好處的。 25soloforce 接下來做什么 8.2 安裝其他軟件 先記得更新一下軟件源,然后就可以放心的 apt-get 了 # apt-get update # apt-get upgrade # apt-get install whatever-you-want 26 forum.cubietech.comsoloforce 參考文獻(xiàn) forum.cubietech.com 致謝 感謝 Cubietech 團(tuán)隊為我們帶來如此好玩的產(chǎn)品!感謝 Cubieboard 社區(qū)的每一個人的貢獻(xiàn)!本文參考了不少資料 文獻(xiàn),在文末給出的相關(guān)參考鏈接未能包含所有出處,請諒解。此外,限于筆者的知識和見識水平,文中必定存在謬 誤,請方家好手不吝批評賜教! 參考文獻(xiàn) [1] http:///Building_on_Debian [2] http:///FirstSteps [3] https://github.com/linux-sunxi/u-boot-sunxi/wiki [4] https://github.com/cubiebook/cubiebook/blob/master/chapter3/debian/debian.md |
|