<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 為pcDuino3 Nano構(gòu)建Linux 4.x + Lubuntu操作系統(tǒng)

          為pcDuino3 Nano構(gòu)建Linux 4.x + Lubuntu操作系統(tǒng)

          作者: 時(shí)間:2018-08-15 來源:網(wǎng)絡(luò) 收藏

          本文參考eewiki上A20-OLinuXino-LIME的系統(tǒng)構(gòu)建流程,為pcDuino3 Nano Lite交叉編譯Mainline U-Boot和Kernel 4.x,并運(yùn)行Lubuntu 14.04圖形桌面。

          本文引用地址:http://www.ex-cimer.com/article/201808/386880.htm

          兔子使用的交叉編譯主機(jī)環(huán)境為Xeon E5620服務(wù)器和Ubuntu Server 14.04 64-bit操作系統(tǒng),而交叉編譯需要的Linaro GCC為32-bit版本,因此需要安裝相關(guān)32-bit庫。

          sudo apt-get update

          sudo apt-get upgrade

          sudo apt-get install libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386

          下載交叉編譯工具,并將環(huán)境變量CC設(shè)置為編譯器的路徑和名稱前綴。

          wget -c https://releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz

          tar xf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz

          export CC=`pwd`/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-

          深入命令查看GCC版本來驗(yàn)證交叉編譯工具的配置,如果報(bào)錯(cuò)請(qǐng)檢查32-bit庫是否安裝正確。

          ${CC}gcc --version

          編譯U-Boot

          從U-Boot官方Git倉庫下載U-boot源碼。

          git clone git://git.denx.de/u-boot.git

          cd u-boot/

          git checkout v2015.10 -b tmp

          使用pcDuino 3 Nano的配置文件進(jìn)行配置。

          make ARCH=arm CROSS_COMPILE=${CC} distclean

          make ARCH=arm CROSS_COMPILE=${CC} Linksprite_pcDuino3_Nano_defconfig

          編譯U-Boot,這里采用4線程加速編譯。

          make ARCH=arm CROSS_COMPILE=${CC} -j4

          編譯完成后,在U-Boot目錄下會(huì)生成u-boot-sunxi-with-spl.bin文件,即為包含了A20初級(jí)Bootloader和U-Boot的鏡像。

          編譯Linux 4.x Kernel

          eewiki上使用了Robert Nelson編寫的編譯腳本來簡化Kernel編譯過程。下載編譯腳本,并根據(jù)需要選擇要編譯的Kernel版本。本例使用4.1.x版本。

          git clone https://github.com/RobertCNelson/armv7-lpae-multiplatform

          cd armv7-lpae-multiplatform/

          選擇Linux 4.1.x Longterm版:

          git checkout origin/v4.1.x -b tmp

          選擇Linux 4.2.x Stable版:

          git checkout origin/v4.2.x -b tmp

          選擇Linux 4.3.x Prepatch版:

          git checkout origin/v4.3.x -b tmp

          運(yùn)行build_kernel.sh腳本開始編譯。腳本會(huì)自動(dòng)下載并配置交叉編譯工具,從Kernel官方Git倉庫下載源碼并開始編譯。

          ./build_kernel.sh

          期間會(huì)進(jìn)入menuconfig界面。由于腳本是為多平臺(tái)設(shè)計(jì)的,用戶可以根據(jù)需要裁剪不需要的平臺(tái)和模塊支持。

          編譯完成后,在deploy目錄下會(huì)生成zImage鏡像文件,modules和firmware壓縮包。

          獲取RootFS

          eewiki提供了兩種可供選擇的精簡版根文件系統(tǒng),分別為Ubuntu 14.04和Debian 8。本文選擇使用Ubuntu系統(tǒng)。下載并解壓rootfs:

          wget -c https://rcn-ee.com/rootfs/eewiki/minfs/ubuntu-14.04.3-minimal-armhf-2015-09-07.tar.xz

          tar xf ubuntu-14.04.3-minimal-armhf-2015-09-07.tar.xz

          另附Dibian 8的下載地址:

          https://rcn-ee.com/rootfs/eewiki/barefs/debian-8.2-bare-armhf-2015-09-07.tar.xz

          制作啟動(dòng)SD卡(MicroSD)

          將TF卡通過USB讀卡器連接編譯主機(jī),清除分區(qū)表sdX為對(duì)應(yīng)的SD卡設(shè)備,如果使用主機(jī)自帶的讀卡器,則可能識(shí)別為mmcblkX。

          sudo dd if=/dev/zero of=/dev/sdX bs=1M count=10

          通過gparted或fdisk等工具為SD卡重新分區(qū)并格式化SD卡,本例使用Sandisk 8GB Class10 MicroSD卡。

          分區(qū)后向SD卡寫入編譯好的Bootloader。

          sudo dd if=./u-boot/u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8

          掛載SD卡分區(qū)。

          sudo mkdir -p /media/boot/

          sudo mkdir -p /media/rootfs/

          sudo mount /dev/sdX1 /media/boot/

          sudo mount /dev/sdX2 /media/rootfs/

          將deploy目錄下的zImage文件復(fù)制到BOOT分區(qū),同時(shí)將設(shè)備樹文件也解壓到BOOT分區(qū),此處文件名中的kernel_version會(huì)根據(jù)不同的Kernel版本發(fā)生變化。

          sudo cp deploy/(kernel_version).zImage /media/boot/zImage

          sudo tar xfv deploy/(kernel_version)-dtbs.tar.gz -C /media/boot/

          (這里還沒有找到選擇編譯Nano設(shè)備樹的配置,本例實(shí)際使用的文件是從網(wǎng)上找到的:https://github.com/Thermionix/arch-satnav/blob/master/uBoot-pcDuino-Nano/sun7i-a20-pcduino3-nano.dtb)

          在BOOT分區(qū)新建一extlinux目錄和配置文件。

          sudo mkdir -p /media/boot/extlinux/

          sudo nano /media/boot/extlinux/extlinux.conf

          配置用于指定Kernel、Device Tree和RootFS位置,其內(nèi)容如下:

          label Linux 4.x

          kernel ../zImage

          append root=/dev/mmcblk0p2

          fdtdir ../

          最后復(fù)制根文件系統(tǒng)到第二個(gè)分區(qū)。

          sudo tar xfvp ubuntu-14.04.3-minimal-armhf-2015-09-07/armhf-rootfs-ubuntu-trusty.tar –C /media/rootfs

          將編譯Kernel生成的模塊也復(fù)制到該分區(qū)。

          修改根文件系統(tǒng)分區(qū)下的etc/fstab文件,加入如下內(nèi)容。

          /dev/mmcblk0p2 / auto errors=remount-ro 0 1

          /dev/mmcblk0p1 /boot auto errors=remount-ro 0 1

          修改etc/network/interfaces文件自動(dòng)配置網(wǎng)卡和DHCP。

          auto lo

          iface lo inet loopback

          auto eth0

          iface eth0 inet dhcp

          卸載并移除SD卡。

          sync

          sudo umount /media/boot

          sudo umount /media/rootfs

          為pcDuino3 Nano連接USB 5V2A電源、HDMI、USB鍵盤鼠標(biāo),插入制作好的SD卡,上電啟動(dòng)。

          本系統(tǒng)從U-Boot開始就能夠支持HDMI、Ethernet和USB設(shè)備,因此除了從SD卡啟動(dòng)操作系統(tǒng)外還可以選擇U盤或網(wǎng)絡(luò)啟動(dòng)。Ubuntu系統(tǒng)啟動(dòng)后停留在命令行登錄界面,默認(rèn)的用戶名為ubuntu,密碼為temppwd。

          安裝Lubuntu桌面

          eewiki提供的Ubuntu為精簡版本,這樣一來用戶可以方便的選擇安裝不同的桌面。本文選擇Lubuntu桌面。

          通過命令行界面登錄Ubuntu,然后從Ubuntu源在線安裝桌面。

          suto apt-get update

          sudo apt-get upgrade

          sudo apt-get install lubuntu-desktop

          經(jīng)過漫長的安裝等待后,重啟系統(tǒng)就可以進(jìn)入桌面了。



          關(guān)鍵詞: 顯示器 驅(qū)動(dòng)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();