Banana PiU-Boot経由でArch Linuxに

Raspberry Piの発売以来4幎連続で、非x86アヌキテクチャのさたざたなマむクロコンピュヌタヌが、メディアセンタヌ、スマヌトホヌムコントロヌラヌ、Webサヌバヌずしお機胜する䞖界䞭の垂堎に配信されたした。



2014幎から2015幎たでに、誰もがRaspberryのコンピュヌティング機胜に満足しおいるわけではなく、より匷力なハヌドりェアを備えた倚数のクロヌンのリリヌスが開始されたした。 それらのほずんどには欠点がありたすカヌネルずブヌトロヌダヌの叀いバヌゞョンが修正されおいるこず、ディストリビュヌションの遞択が少ないこず。 カットの䞋で、Banana Piの䟋を䜿甚しお、ベンダヌの束瞛を打砎する方法に぀いお説明したす。



背景



2014幎の埌半にホヌムサヌバヌが欲しかったのですが、Intel Atomシリヌズプロセッサを搭茉したクラシックなx86アヌキテクチャず、私にずっお新しいもの、ARMベヌスのマむクロコンピュヌタのどちらかを遞択したした。



䟡栌/性胜/機胜の比率を評䟡した埌、遞択肢はバナナPiに萜ちたした-デュアルコアAllwinner A20、1ギガバむトDDR3、ギガビットLAN、SATAコネクタなどのデバむスのパン粉です。 数日遊んだ埌、私はバナナが投獄されたプラスチック郚品からケヌスを䜜り、長い間あらゆる皮類の小さな仕事を務めたした。



ディストリビュヌションはBananianでした-これは、リ゜ヌスを節玄するために倚くの点で切り捚おられたDebian 7 Wheezyです。 今日たで新しいDebian 8.xはありたせん。セキュリティパッチのみを受け取る゜フトりェアがどれだけ叀いか想像できたす。 このすべおの䞍名誉は真倏たで続きたした...







最埌に、7月に、ペットプロゞェクトのためにWebサヌバヌず関連サヌビスを䞊げる必芁がありたした。 叀いDebianを保守的でなく、私にずっおより䟿利なものに倉曎する時が来たした。



問題の声明



ディストリビュヌションにはいく぀かの芁件がありたした。すべおのニヌズをカバヌする「すぐに䜿える」リポゞトリが必芁であり、それらのプログラムは利甚可胜な最新バヌゞョンに最も近いはずです。 私はディストリビュヌションずそのプログラムの開発を远っおいたすが、私はすべおの゜ヌスをコンパむルするのが面倒なので、Arch Linuxが圓然の遞択になりたした。



メヌカヌのりェブサむトのダりンロヌドセクションで、私は有線の未曎新カヌネル3.4.100、同幎霢のブヌトロヌダヌ、および別のデバむスCubieboard 2を䜿甚した1幎の期限切れの画像を埅っおいたした。 Arch Linuxサむトでは、Banana Piのサポヌトは発衚されおいたせん。 これらすべおに基づいお、残っおいるこずが1぀だけありたした。ディストリビュヌションを自分でビルドしお実行するこずです。



マテリ゚ル







Das U-Boot 名前の由来は、朜氎艊ずドむツ語ず英語のしゃれず䜕らかの関係がありたす。Uボヌトを参照 

これはオペレヌティングシステムのブヌトロヌダヌであり、MIPS、PowerPC、ARMなどのアヌキテクチャを備えたデバむスに焊点を圓おおいたす。 圌は倚くのこずを知っおいたす。NAND、NOR、SPI、MMC、SATA、USB、TFTP、NFSからシステムを起動し、デバむスのROMたたは倖郚メモリに栌玍でき、dhcpクラむアントずシェルを内蔵し、キヌボヌドから信号を受信し、UART、HDMIに出力したす、VGA、アナログビデオ。 圓然、これをすべおサポヌトするには、ドラむバヌが必芁です。



これがx86プラットフォヌムずの違いの始たりです-ARMにはACPI高床な構成および電源管理むンタヌフェむスおよびUEFIオペレヌティングシステムずデバむスの「ファヌムりェア」間の盞互䜜甚むンタヌフェむスがないため、ARMコンピュヌタヌには統䞀されたディストリビュヌションはありたせんが、その動きはUEFIずACPIの偎は数幎間続いおいたす。 それたでの間、この動きは続いおおり、私たちは珟実の厳しい䞖界にいたす。ロヌダヌはさたざたな皮類のハヌドりェアに合わせお個別にコンパむルする必芁がありたす。 鉄はず呌ばれるデヌタ構造で蚘述されたす デバむスツリヌdt DTの詳现に぀いおは、専甚サむトdevicetree.orgをご芧ください 。



ブヌトロヌダヌの゜ヌスコヌドを完備し、コンパむル甚の蚭定ファむルのセットず1089デバむスのデバむスツリヌが付属しおいたす。 残念ながら、Googleはこのリストを芋぀けられないので、ここから入手できたす。 U-boot察応デバむス 。







Linuxカヌネル



圌に぀いおは倚くのこずが曞かれおおり、倚くのこずが蚀われおきたが、今ではいく぀かの事実だけが圹に立぀だろう。

  1. 私が出䌚ったディストリビュヌションは、カヌネルをいく぀かの圢匏で保存しおいたす。

    • 画像は圧瞮画像ではありたせん。
    • zImageは、圧瞮された自己解凍画像です。
    • uImage-U-Bootの情報を含むラッパヌを含むむメヌゞ。


    以前は、uImageはU-Bootを備えたデバむスで広く䜿甚されおいたしたが、近幎、開発者はブヌトロヌダヌにzImageを䜿甚するこずを教えおいたす。
  2. 良いニュヌスです 同じアヌキテクチャARMv5、ARMv6、ARMv7、ARMv8内にある可胜性の高いコアは、デバむスごずにコンパむルする必芁はありたせん。 ずいうバヌゞョンのデバむスツリヌを䜿甚したす デバむスツリヌバむナリdtb これらは、どのモゞュヌルをロヌドする必芁があるかをカヌネルに瀺す小さなファむルです。 dtbの詳现に぀いおは、 こちらをご芧ください 。



理論から実践ぞ



あなたが必芁になりたす



U-Bootの最新バヌゞョンの゜ヌスコヌドをダりンロヌドしお解凍したす。

 wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2 tar -jxf u-boot-latest.tar.bz2
      
      





衚瀺されるu-boot-2015.07 / configsディレクトリに「鉄片」を芋぀けお、ファむル名を蚘憶したす。 Banana Piの堎合、構成ファむルはBananapi_defconfigず呌ばれたす 。



Arch Linux ARMディストリビュヌションのコアはzImageに保存されおいるこずを芚えおいたすか 事前にこれを凊理し、コンパむルする前に自己解凍カヌネルをロヌドする機胜を远加する必芁がありたす。 これがデフォルトで既に有効になっおいるかどうかに぀いおの正確な情報はありたせん。したがっお、 u-boot-2015.07 / include / configs /ディレクトリで、ご䜿甚のマむクロコンピュヌタヌプラットフォヌムのヘッダヌファむルを芋぀けおくださいBanana Piの堎合はsun7i.h 。

 #ifndef __CONFIG_H #define __CONFIG_H ... #endif /* __CONFIG_H */
      
      





行

 #define CONFIG_CMD_BOOTZ
      
      





これにより、ブヌトロヌダヌでbootzコマンドを䜿甚しお、自己解凍圧瞮プログラムを実行する機胜が远加されたす。 出所



これでコンパむル段階です。 すべおの操䜜はu-boot-2015.07ディレクトリで行われたす 。

クロスコンパむルしないずどうなりたすか
同じアヌキテクチャたずえば、ARMv7を搭茉したコンピュヌタヌでコンパむルする堎合、makeではCROSS_COMPILEフラグを省略できたす。



 make CROSS_COMPILE=arm-linux-gnueabihf- Bananapi_defconfig
      
      





ブヌトロヌダヌを盎接コンパむルしたす。

 make CROSS_COMPILE=arm-linux-gnueabihf-
      
      





その結果、u-bootプレフィックスを持぀倚くのファむルが䜜業フォルダヌに衚瀺されるはずです。 u-boot.binにはブヌトロヌダヌ実行可胜ファむルが含たれおいたすが、「with-spl」ずいう接尟蟞が付いたファむルが必芁です。 SPLは、ブヌトロヌダヌの盎前にある小さなプログラムで、U-Boot自䜓をRAMにロヌドしたす。 Banana Piの堎合、これはu-boot-sunxi-with-spl.binファむルです 。 保存しおおけば、埌で䟿利になりたす。



次のステップは、システムが起動するフラッシュカヌドを準備するこずです。 レむアりトは次のようになりたす。







カヌドリヌダヌを介しおフラッシュカヌドを接続し、fdiskナヌティリティを実行したす。

 fdisk /dev/sdb
      
      





カヌドの名前を調べる方法は
挿入されたカヌドに察応するディレクトリ/ dev /に新しいファむルが衚瀺されたす。 SCSIデバむスsda、sdb、sdc ...たたはブロックMMCメモリmmcblk0、mmcblk1 ...ずしお定矩されたす。



MBRマヌクアップを远加したす。

 Command (m for help): o Created a new DOS disklabel with disk identifier 0xa53166ce.
      
      





そしお、少なくずも2぀のセクションを確認しおください。

  1. 50-100 Mb

    fdisk、最初のマヌクアップ
     Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-7831551, default 2048): 2048 Last sector, +sectors or +size{K,M,G,T,P} (2048-7831551, default 7831551): +75M Created a new partition 1 of type 'Linux' and of size 75 MiB.
          
          







  2. 2 GB以䞊

    fdisk、2番目のマヌクアップ
     Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): 2 First sector (155648-7831551, default 155648): 155648 Last sector, +sectors or +size{K,M,G,T,P} (155648-7831551, default 7831551): +3G Created a new partition 2 of type 'Linux' and of size 3 GiB.
          
          









このすべおの埌、「w」を入力しお、倉曎をディスクに曞き蟌みたす。



なぜそのようなセクションですか U-Bootはスクリプトを䜿甚しお制埡でき、ドラむブの最初のパヌティションからのみ読み取りたす。このセクションはFATファむルシステムである必芁がありたす。 同じセクションで、将来のArch Linuxの/ブヌトディレクトリがマりントされ、U-Bootスクリプトからカヌネルにアクセスしやすくなりたす。たた、出䌚ったコンピュヌタヌからカヌネルをすばやく亀換できたす。 2番目のセクションは、システムのルヌト甚です。 残りはオプションです。



マヌクした埌、ブヌトロヌダヌ甚のスペヌスをクリアする必芁がありたす。 最初の512バむトMBRを䞊曞きせず、さらに1024セクタヌに圱響を䞎えないこずが非垞に重芁です䞊蚘の衚に基づく

 dd if=/dev/zero of=/dev/sdb bs=1K count=1023 seek=1
      
      





U-Bootを䜜成したす。

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





これで、USBフラッシュドラむブを宛先デバむスに挿入し、電源を入れおLEDで点滅する方法を確認し、dhcpでIPアドレスを取埗し、tftpサヌバヌに到達しお起動を詊み、出力たたはUARTで衚瀺しおシェルに招埅したす。



しかし、1぀のブヌトロヌダヌでは十分ではなく、U-Bootを管理するスクリプトずArch Linux自䜓の配垃甚のコンポヌネントがただいく぀かありたす。

os.archlinuxarm.orgにアクセスし、アヌキテクチャに適したディストリビュヌションのアヌカむブをダりンロヌドしたす。 バナナの堎合、これはArchLinuxARM-armv7-latest.tar.gzです。 別のディレクトリに展開し、フラッシュカヌドの操䜜を続けたす。



ファむルシステムを䜜成し、指定された順序でマりントしたしょう。

 mkfs.vfat /dev/sdb1 mkfs.ext4 /dev/sdb2 mount /dev/sdb2 /mnt mkdir /mnt/boot mount /dev/sdb1 /mnt/boot
      
      





解凍したアヌカむブの内容党䜓を/ mntにコピヌしたす。

 cp -r ~/ArchLinux-generic-armv7/* /mnt
      
      





フラッシュドラむブの最初のセクション/ mnt / bootを芋おみたしょう。 内郚では、dtbsフォルダヌず圧瞮されたカヌネルむメヌゞ-zImageを埅機しおいたす。 dtbsはたさに䞊蚘で説明したデバむスツリヌバむナリです。

ARMv7の堎合、301 dtbもありたす。 このリストは、 ここで衚瀺するか、コンピュヌタヌのディストリビュヌションのboot / dtbsディレクトリを盎接開くこずで確認できたす。 dtbがある堎合、カヌネルはほが100の確率で起動したす。 Banana Piの堎合、目的のファむルはsun7i-a20-bananapi.dtbです。 U-Boot甚のスクリプトを䜜成し、圓然のこずながら、結果のシステム党䜓を起動する最終段階ず最終段階に必芁です。



始めたしょう。 boot.cmdファむルを適切な堎所 / mnt / boot に䜜成し、曞き蟌みを開始したす。



最初に、カヌネルむメヌゞをRAMにロヌドするようU-Bootに指瀺したす。

 fatload mmc 0 0x46000000 zImage
      
      





次に、目的のデバむスのdtb

 fatload mmc 0 0x49000000 dtbs/sun7i-a20-bananapi.dtb
      
      





カヌネルを起動するためのパラメヌタヌを蚭定したす。

 setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait panic=10
      
      





そしお、このメモリ領域からブヌトするように圌に䌝え、それによっおLinuxカヌネルに制埡を移したす。

 bootz 0x46000000 - 0x49000000
      
      





各モデルでダりンロヌドできるメモリ領域は異なりたすが、残念ながら自分でそれらを決定する方法はわかりたせん。 誰かがコメントの䞭で簡単な蚀葉でそれに぀いお語っおくれたらずおもうれしいです。



䜜成したスクリプトはコンパむルのみ可胜です。 このために、uboot-toolsパッケヌゞにはmkimageナヌティリティがあり、それを䜿甚したす。

 mkimage -C none -A arm -T script -d boot.cmd boot.scr
      
      





必芁に応じおboot.cmdを削陀できたす。ブヌトロヌダヌに必芁なのはboot.scrのみです。

boot.scrのようなものはありたすか
はい、そうです。 䞀郚のデバむスのU-Bootは、単玔なテキストファむルuEnv.txtで構成できたす。これはベンダヌによっお異なりたすが、Banana Piではこのトリックは機胜したせん。


最埌のタッチ-起動時に接続される新しいシステムのetc / fstabにセクションを远加したす。

 /dev/mmcblk0p2 / ext4 rw,relatime,data=ordered 0 1 /dev/mmcblk0p1 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 2
      
      





フラッシュドラむブをデバむスに挿入しお、新しいシステムを楜しむこずができたす。 ネットワヌクにDHCPサヌバヌがある堎合、dhcpdデヌモン自䜓がアドレスを取埗したす。 SSHサヌバヌはデフォルトで自動ロヌドに远加されたす。 Arch Linux ARMのデフォルトむメヌゞのアカりントは垞に唯䞀の1぀ですroot / root。 必ずパスワヌドを倉曎し、制限された暩限を持぀ナヌザヌを远加しおください。







たずめ



䜕を埗たの 私のマむクロコンピュヌタヌのサポヌトは、U-Bootでサポヌトされおいる1089デバむスのリストにあり、ARMv7のメむンラむンでサポヌトされおいるカヌネルの301番目にありたす。 したがっお、たさに私たちが望んでいたものを手に入れたした。システムのカヌネル珟圚4.1.4を含むリポゞトリから安定的に曎新される最新の゜フトりェアを備えたシステムです。 安定したブヌトロヌダヌブランチは3か月ごずに曎新され、䞊蚘のようにコンパむルしおむンストヌル手順を繰り返すだけで枈みたす。



すぐに動䜜しないものは䜕ですか
カヌネルずディストリビュヌションには、Maliドラむバヌのカヌネルたたはナヌザヌスペヌス郚分がありたせん。 これは、完党に機胜するビルドが、ARMパヌトナヌにのみ提䟛される独自のSDKを䜿甚するこずでのみ可胜であるずいう事実によるものです。


怠け者のために



Banana Pi甚の画像を準備したした

リンク 、 ミラヌ1 、 ミラヌ2 。

アヌカむブ内のmd5むメヌゞf36d707c4c1fd857b50d37501b4a3d7a

ddナヌティリティたたはwin32diskimagerWindowsナヌザヌ甚を䜿甚しお、フラッシュカヌドにむメヌゞを曞き蟌むこずができたす。



゜ヌス



linux-sunxi.org/Mainline_U-boot

elinux.org/RPi_Hub

en.wikipedia.org/wiki/Das_U-Boot



自宅でこれを繰り返したいず思う人々に幞運を祈り、公正な批刀に満足するでしょう。










All Articles