ボヌド䞊にAllwinner A10 SoCを搭茉したタブレットでLinuxを実行する

背景



SoC Allwinner A10でタブレットを賌入したした sun4iは、A8コアファミリのCortexアヌキテクチャのAllWinner A10 ARMv7-Aプロセッサのコヌド名です 。 最初はAndroid 2.xで、次に4.xでプレむしたしたが、時間が経぀に぀れお十分ではなくなりたした。 さらに、Linuxを搭茉したこのSoCに基づくミニコンピュヌタヌが生産を開始したした。 「うヌん、私のタブレットより悪いこずは䜕だろう」ず思い、ビゞネスに取りかかりたした。 刀明したように、すべおがすでに私のために行われおおり、物事を行う必芁はありたせんでした 

  1. カヌネルはこのプラットフォヌム甚に最適化されおいたす。
  2. このプラットフォヌム甚に最適化されたブヌトロヌダヌ
  3. 新しいdebian armhfポヌトがリリヌスされたした 。


この党䜓が構成され、組み立おられたたたです。



氎曜日



システム-ArchLinux x86-64。 アセンブリ甚の環境の堎所ずむンストヌル方法に぀いおは説明したせんが、むンタヌネット䞊ではこの情報で十分です。 はい、そしおこれのほずんどが理由ではなく、私は必芁なものすべおを集めさせたす。

私の「台所」はこれです



SoCブヌトプロセス





぀たり ダりンロヌドはSDカヌドから開始され、そこにブヌトロヌダヌがない堎合は、NANDフラッシュが続行されたす。

allwinner-ubootブヌトロヌダヌのドキュメントによるず、SDカヌドの構造は次のようになりたす。

始たり サむズ 説明
0 8KB 未䜿甚、パヌティションテヌブルなどに䜿甚可胜
8 24KB 初期SPLロヌダヌ
32 512KB u-boot
544 128KB 環境
672 352KB 予玄枈み
1024 パヌティションは無料


U-bootアセンブリ


収集する必芁はありたせん。sun4i-spl.binu-boot.binはここからダりンロヌドできたす 。

uboot-allwinnerをビルドしたす。


git clone git://github.com/hno/uboot-allwinner cd uboot-allwinner make sun4i CROSS_COMPILE=arm-none-linux-gnueabi- cd ..
      
      





ブヌトロヌダヌ゚ントリ





泚意、SDカヌドデバむスを他のメディアず混同しないように泚意しおください。 自分が䜕をしおいるのか理解しおいないなら、それをもっず良くしないでください。

$ {SD}-デバむス倉数。手動で眮換でき、実行前に登録できたす。

 export SD=/dev/sdb
      
      





 # SPL (boot0)    SD dd if=uboot-allwinner/spl/sun4i-spl.bin of=${SD} bs=1024 seek=8 conv=notrunc #  (boot1) u-boot   SD dd if=uboot-allwinner/u-boot.bin of=${SD} bs=1024 seek=32 conv=notrunc
      
      







microSDドラむブを壊したす





泚意、操䜜の結果ずしお、MicroSDドラむブ䞊のデヌタは倱われ、必芁なものはすべお安党な堎所に保存されたす。

  • 必ず2぀のセクションを䜜成する必芁がありたす。
  • 最初のセクションは、鉄の構成ファむルevb.binずカヌネルuImageを含むセクションです。 セクタ2048から始たり、サむズが32MB〜100MBで、FATファむルシステムFATパヌティションタむプたたはext2 / 3パヌティション83タむプが必芁です。
  • 2番目のパヌティションはrootfsパヌティションで、システム党䜓です。パヌティションサむズを1GB〜4GB以内にするこずが望たしいです。ファむルシステムは厳密にext4で、パヌティションタむプは83です。
  • 必芁に応じお、別のスワップセクションを䜜成できたす。
  • 残りのスペヌスを自分で䜿甚しおください。 デヌタ甚のセクションを䜜成したした。/home/にマりントできたす


16GBカヌドを壊した方法は次のずおりです。

 fdisk -l /dev/sdb Disk /dev/sdb: 15.9 GB, 15935209472 bytes 64 heads, 32 sectors/track, 15197 cylinders,  31123456  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: 0x000728ca -     Id  /dev/sdb1 2048 34815 16384 83 Linux /dev/sdb2 34816 6326271 3145728 83 Linux /dev/sdb3 6326272 31123455 12398592 83 Linux
      
      





䞊蚘のポむントに埓っお、MicroSDドラむブを砎損したす。

Linuxを䜿甚する人がfdiskを䜿甚できるこずを願っおいたす。

 fdisk ${SD}
      
      









曞匏蚭定


 mkfs.vfat ${SD}1 -n sun4i-boot mkfs.ext4 ${SD}2 -L sun4i-rootfs
      
      





適切な堎所にマりントしたす。

 mkdir /mnt/sun4i-boot mkdir /mnt/sun4i-rootfs mount ${SD}1 /mnt/sun4i-boot mount ${SD}2 /mnt/sun4i-rootfs
      
      





カヌネルアセンブリ





カヌネルをコンパむルできたせん。䞋のモゞュヌルを䜿甚しお既補のカヌネルを添付したした。

 #  git clone git://github.com/amery/linux-allwinner.git #  cd linux-allwinner make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- sun4i_defconfig #  make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- gconfig
      
      





gconfigの代わりに、xconfigqtむンタヌフェむスたたはmenuconfigコン゜ヌルむンタヌフェむスのテむストを䜿甚できたす。 カヌネルに必芁なドラむバヌず必芁な機胜を含めるこずを忘れないでください。 オプションのヒントをお読みください。

タッチスクリヌンモゞュヌルずfsfat、ntfsを忘れないでください。

 # make ARCH=arm CFLAGS="march=armv7-a -mfloat-abi=hard -mfpu=neon -ftree-vectorize -mvectorize-with-neon-quad -mcpu=cortex-a8 -mtune=cortex-a8 -mthumb -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -ffast-math" CROSS_COMPILE=arm-none-linux-gnueabi- -j3 uImage modules #  make ARCH=arm CFLAGS="march=armv7-a -mfloat-abi=hard -mfpu=neon -ftree-vectorize -mvectorize-with-neon-quad -mcpu=cortex-a8 -mtune=cortex-a8 -mthumb -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -ffast-math" CROSS_COMPILE=arm-none-linux-gnueabi- -j3 INSTALL_MOD_PATH=/mnt/sun4i-rootfs #   boot  cp arch/arm/boot/uImage /mnt/sun4i-boot
      
      





-j匕数は、同時コンパむルスレッドの数を指定したす。 プロセッサのコアよりもスレッドが1぀倚いこずが実隓的に確立されたした。

最適化フラグはValdikSSの蚘事から取埗されたす 。 正盎なずころ、カヌネルはそれらでコンパむルされたした。 ただし、SDフラッシュカヌドにはただむンストヌルしおいたせん。

rootfsをむンストヌルする



debootstrapを䜿甚しお初期rootfsをロヌドする方法に぀いおは説明したせん。これは別の蚘事に倀するからです。 既補のDebian Wheezy ARMHF rootfsを配眮した方が良いでしょう。

u-bootはデフォルトでこのように蚭定されおいるため、rootfsは2番目のSDパヌティションに保存されおいる属性で解凍する必芁がありたす蚭定に぀いおはこちらを参照しおください 。

Debian Wheezy Rootfsをダりンロヌドしお解凍したす。

 tar -xpf debian-wheezy-armhf-rootfs.img.tar.bz2 -C /mnt/sun4i-boot
      
      





ずころで、カヌネル3.0.36+ぞのモゞュヌルもありたす。 たた、ナヌザヌuser、network-manager、nm-appletの自動ロヌドを備えたスリムなlxdeがセッションの開始時に開始されたす。 タッチスクリヌンはタッチパッドモヌドで動䜜したす。

udevは必芁なすべおのモゞュヌルをロヌドする可胜性がありたすが、確かに、それらは/ mnt / sun4i-rootfs / etc / modulesに蚘述できたす。 必芁なモゞュヌルのリストは、TerminalEmulatorを介しおAndroidOSで取埗できたす。

TerminalEmulator$ lsmod
lsmod






ADBを介しお

 adb shell lsmod
      
      





Linuxブヌトセットアップ


最初のブヌトパヌティションの内容を含むアヌカむブをダりンロヌドしたす 。

そしお、アヌカむブから/ mnt / sun4i-bootのevb.bin構成ファむルを抜出したす。

 tar -xf debian-wheezy-armhf-boot.tar.bz2 evb.bin -C /mnt/sun4i-boot
      
      





カヌネルをビルドしなかった堎合、アセンブルされたカヌネル3.0.36+も抜出できたす。

 tar -xf debian-wheezy-armhf-boot.tar.bz2 uImage -C /mnt/sun4i-boot
      
      





打ち䞊げ


おそらく、すべおが準備できおいたす。 システムをSDドラむブにむンストヌルしたした。 microSDカヌドをタブレットのカヌドリヌダヌに挿入し、電源を入れたす。 電源を入れおから5秒埌に、バックラむトが点灯し、画面が黒のたたになりたす。 数分埌、システム党䜓が起動するはずです。

ルヌトのデフォルトパスワヌドはrootであり、ナヌザヌはuserであるこずに泚意しおください。 倉曎するこずをお勧めしたす。

USBキヌボヌドがない堎合は、rootfsに仮想キヌボヌドがプリむンストヌルされおいたす。

WiFiネットワヌクに接続しおいる、たたはUSBむヌサネットアダプタヌを䜿甚しおおり、nm-appletを䜿甚しおネットワヌクに接続しおいたす。 ssh経由ですぐに接続できたす。

lxterminalを起動し、必芁な゜フトりェアを提䟛したす。

 sudo -i apt-get update apt-get install vlc geany
      
      





考えられる問題



  1. 電源を入れおも䜕も衚瀺されない堎合は、ダりンロヌドが進行䞭の可胜性がありたす。5分ほど埅ちたす。ただし、ハむラむトが衚瀺されない堎合は、evanda.binをnandaにあるAndroidファヌムりェアの蚭定ファむルに眮き換える必芁がありたす。

    Terminal Emaulatorたたはadbを介したAndroidのデバむス

     adb shell su mkdir /local/data/tmp/nanda mount /dev/block/nanda /local/data/tmp/nanda
          
          





    䜕らかの方法でscript.binを抜出したす。これを行いたした。

    $ adb pull /local/data/tmp/nanda/script.bin evb.bin

     cp evb.bin /mnt/sun4i-boot/
          
          





  2. バックラむトはただあるが、システムが起動しおいない堎合は、タブレットからMicroSDカヌドを取り倖しお/ mnt / sun4i-rootfsにマりントするこずにより、システムログを衚瀺できたす。

     cat /mnt/sun4i-rootfs/var/log/dmesg cat /mnt/sun4i-rootfs/var/log/Xorg.0.log
          
          





  3. タッチが機胜しない堎合は、Androidでどのモゞュヌルがタッチの原因であるかを確認する必芁がありたす。

    ADBによる方法

     adb shell 'lsmod | grep ts'
          
          





    TerminalEmulatorを介したメ゜ッド
    lsmod | grep ts








    / mnt / sun4i-rootfs / etc / modules



おわりに


そこで、MOMO9タブレットでLinuxを起動したした。 システムはただ完党に構成されおいないため、同じラップトップモヌドを構成しお必芁なパッケヌゞを配垃しおも問題はありたせん。 かなりの時間がかかりたした。 しかし、その埌、システムをれロから「ほが」組み立おた埌、すぐにこのOSがどのように機胜するかを理解し始めたす。 特別な英語の語圙の語圙も補充されたすが、これも悪くはありたせん。

MOMO9スクリヌンショットのDebian Wheezy
以䞋は、MagickImageパッケヌゞのむンポヌトナヌティリティを䜿甚しおデバむス自䜓で取埗したスクリヌンショットです。

画像

本圓の

携垯電話をカメラで撮圱したが、他に手元にないので、すみたせん。



そしおもちろん、私はあなたがあなたのPCで䜕をするか、機噚の損傷に぀いお䜕の責任も負いたせん。 理解しおすべおを行いたす。 SDリヌダヌデバむスをハヌドドラむブたたはその他のデバむスず混同しないでください。

UPD



  1. SoCブヌトプロセス。 フォヌラムの説明。
  2. SoCブヌトプロセス。
  3. .configファむルは、linux-allwinner / scripts / extract-ikconfigカヌネルの゜ヌスフォルダヌにあるスクリプトを䜿甚しお、既にコンパむルされたカヌネルから抜出できたす。 ぀たり、新しいカヌネルを最初から蚭定するこずはできたせんが、叀いカヌネルの蚭定ファむルを䜿甚したす。コンパむル時にのみ、ビルドスクリプト、新しいカヌネル機胜ずモゞュヌルをどうするかカヌネルに含めるか、むメヌゞに含めないかカヌネル。
  4. RZK333は゜ヌスを远加したしたRhombus-Techarm-netbook @ freenode channel、ここであなたが説明しおいるもののすべおの䜜者はそこから来おいたすカヌネルのパッチ、u-bootのパッチ、SPL解析、SDからの起動およびlinux-sunxi.org折られた。 私はチャンネルにはいたせんでしたが、wikiの情報は興味深いものです。

  5. 私はこのトピックから倚くをscいたした。 Linux on AllWinner A10、仕組み、ディスカッション、コアビルディング

  6. いく぀かのスクリヌンショットを远加したした。

  7. 私はこの分野の勉匷を始めたばかりなので、むンストヌルする最も正しい方法のふりをしおいるわけではありたせん。 したがっお、䞍正確な点に気づいたら、私を正すために「恥ずかしがらない」でください。 感謝するだけです。




All Articles