例としてASUS DSL N12Uを使用してOpenWRTを新しいデバイスに移植する

ルーターがサポートされているOpenWRTデバイスのリストにない場合はどうすればよいですか? もちろん、独自のポートを作成します。 このプラットフォームのサポートが既に実装されている場合、これはかなり迅速に実行できます。

この記事では、ファームウェア全体を移植するプロセスと、OpenWRTをASUS DSL N12Uに移植した経験について説明します。







まず、これが実際にどの程度行われるかを決定する必要があります。 これを行うには、ルーターの構成を調べます。 イベントの開発には多くのオプションがあります。たとえば、私のルーターはブート時とdmesgのログに必要なパラメーターをすべて表示しました。 ここでは、RAM、ROMボリューム、mtdのパーティションアドレス、そしてもちろん、ルーター自体がどのチップに基づいているかを正確に判断する必要があります。



私の場合の完全なダウンロードログの例はこちらです。



私たちにとって最も重要な行に注意してください:



M25P128(20 20180000) (16384 Kbytes) mtd .name = raspi, .size = 0x01000000 (16M) .erasesize = 0x00040000 (256K) .numeraseregions = 0 Creating 5 MTD partitions on "raspi": 0x00000000-0x01000000 : "ALL" 0x00000000-0x00040000 : "Bootloader" 0x00040000-0x00080000 : "Config" 0x00080000-0x000c0000 : "Factory" 0x000c0000-0x00800000 : "Kernel"
      
      





パーティションアドレスがあり、ROMメモリのボリュームとタイプがあります。 やったー



メモリ量もあり、特定のプラットフォームが示されます。

 ASIC 3052F (DSL-N12U) (Port5<->None) Total memory: 32 MBytes
      
      





互換性のあるデバイステーブルで 、ルーターに最も似ているものを見つける必要があります(主なものはプラットフォームです)。そのようなものがない場合、この指示は役に立ちません。



ルーターは、必要な情報をすべてdmesgとポートのコンソールに表示しました。 しかし、この情報やその他の有用な情報を検索するためのその他のオプションと指示は可能です。 主なものは、GPLファームウェアリリース(存在する場合)とルーターファームウェアダンプです。



また、ルーターのUARTまたはシリアルポートに接続する必要があります。この接続なしでベンチャーが成功する確率はゼロになる傾向があります。 USB-> UARTとして、Arduinoを使用できますが、Arduinoでは信号レベルが5V(およびこれらのデバイスのほとんどが3.3Vであること)を覚えておく必要があります。 そして、この問題を解決するために例をとる必要があります(少なくともRXルーターに抵抗を追加します)。



シリアルポートを検出する方法は別の記事のトピックですが、通常、Linuxを内蔵するほとんどすべてのルーターまたはデバイスにシリアルポートがあります。私の場合は、これは単なるGoogleでした。



それでは、ファームウェアアセンブリに移りましょう。



少なくとも、ツールチェーンを構築するためのパッケージをシステムにインストールする必要があります。

 sudo apt-get install subversion git build-essential
      
      





私はDebian 7でビルドしましたが、一般的にはこの時点で問題はないはずです。



リポジトリのクローンを作成します。

 svn co svn://svn.openwrt.org/openwrt/trunk wrt
      
      





ファームウェアおよびツールチェーンコンポーネントの再帰的な更新を開始します。

 cd ~/wrt ./scripts/feeds update -a ./scripts/feeds install -a
      
      





ツールチェーンの配置:

 make prereq
      
      





次に、最も類似したサポートされているルーターモデルのファームウェアを構成します

 make menuconfig
      
      





ここでは、フィールドに興味があります。

 Target System (Ralink RT288x/RT3xxx) ---> Subtarget (RT3x5x/RT5350 based boards) ---> Target Profile (Asus RT-N13U) --->
      
      





私のルーターに最も近いものとしてASUS RT-N13Uを選択しました。 実際、特定のプロファイルの違いは最小限であり、ほとんどの違いを修正するため、この選択はあまり重要ではありません。主なことはプラットフォームを正しく推測することです。



menuconfigでは、何も変更する必要はありません。



最初のアセンブリでは、ツールチェーンとユーティリティも一度収集する必要があります。

 make tools/install -j9 V=-1 && make toolchain/install -j9 V=-1
      
      





アセンブリ自体は次を使用して行われます

 make -j9 V=-1
      
      





結果はビン/ラミプスにあります



デバイスを記述するためのRamipsは、target / linux / ramips / dtsにあるDTSを使用します。 ASUS DSL RT-N13Uの元のDTSはこちらにあります



ここで、cfi @ 1f000000ブロックを新しいブロックに完全に置き換えます。 明らかに、これは当社のROMチップに適したものではありません。 隣接するDTSをすばやく検索すると、構成例は次のようになっていることがわかりました(これもDTSのブロックです)。



 palmbus@10000000 { spi@b00 { status = "okay"; m25p80@0 { #address-cells = <1>; #size-cells = <1>; compatible = "m25p128"; reg = <0 0>; linux,modalias = "m25p80", "m25p128"; spi-max-frequency = <10000000>; partition@0 { label = "u-boot"; reg = <0x0 0x30000>; read-only; }; partition@30000 { label = "u-boot-env"; reg = <0x30000 0x10000>; read-only; }; factory: partition@40000 { label = "factory"; reg = <0x40000 0x10000>; read-only; }; partition@50000 { label = "firmware"; reg = <0x50000 0xfb0000>; }; }; }; };
      
      





最小限の作業で成功する結果を期待して、変更を加えたASUS RT-N13Uのファームウェアを組み立て、リカバリモードでそれを埋めようとしましたが、ルーターはエラーで受け入れを拒否しました

間違った製品ID。



現時点では、どのIDをチェックしているかがわからなかったため、シリアルポートにアクセスせずにファームウェアをインストールすることはできません。



しかし、ルーターは2 ubootモードで問題なくフラッシュしました

 2: System Load Linux Kernel then write to Flash via TFTP. Warning!! Erase Linux in Flash then burn new one. Are you sure?(Y/N) Please Input new ones /or Ctrl-C to discard Input device IP (192.168.1.1) ==:192.168.0.2 Input server IP (192.168.1.20) ==:192.168.0.20 Input Linux Kernel filename () ==:fw.bin
      
      





ASUSからの回復のようにTFTPサーバーを使用しませんが、ルーター自体は指定されたサーバーに移動し、指定されたファイルをダウンロードします。

最初の試行では、/をマウントできないためにルーターは起動しませんでしたが、ブートログにはROMに問題があることが示されました



 [ 0.550000] m25p80 spi32766.0: found mr25h256, expected w25q128 [ 0.560000] m25p80 spi32766.0: mr25h256 (32 Kbytes) [ 0.570000] 4 ofpart partitions found on MTD device spi32766.0 [ 0.580000] Creating 4 MTD partitions on "spi32766.0": [ 0.590000] 0x000000000000-0x000000030000 : "u-boot" [ 0.600000] mtd: partition "u-boot" extends beyond the end of device "spi32766.0" -- size truncated to 0x8000 [ 0.620000] 0x000000030000-0x000000040000 : "u-boot-env" [ 0.640000] mtd: partition "u-boot-env" is out of reach -- disabled [ 0.650000] 0x000000040000-0x000000050000 : "factory" [ 0.660000] mtd: partition "factory" is out of reach -- disabled [ 0.670000] 0x000000050000-0x000001000000 : "firmware" [ 0.680000] mtd: partition "firmware" is out of reach -- disabled
      
      





疑わしいエラーと組み合わせたm25p80ドライバーの概要



 [ 0.470000] rt2880-pinmux pinctrl: pin io3 already requested by pinctrl; cannot claim for 10000b00.spi [ 0.490000] rt2880-pinmux pinctrl: pin-3 (10000b00.spi) status -22 [ 0.500000] rt2880-pinmux pinctrl: could not request pin 3 (io3) from group spi on device rt2880-pinmux
      
      





問題がいくつかのpinctrにあり、ドライバーがチップにアクセスできないように見えることを明確にしました(彼はそれをid 0で最もプリミティブとして定義しました)。 pinctrlセクションからDTSのspiで行を消去するだけで十分であることが判明しました。m25p80ドライバーがspiにアクセスするのを妨げたのは彼女でした。



デバイスをブートする次の試みで、ROMが正しく検出されたことが明らかになり、残った唯一のことは正しいmtdパーティションアドレスを設定することでした。



次のようになりました:



 palmbus@10000000 { spi@b00 { status = "okay"; m25p80@0 { #address-cells = <1>; #size-cells = <1>; compatible = "m25p128"; reg = <0 0>; linux,modalias = "m25p80", "m25p128"; spi-max-frequency = <10000000>; partition@0 { label = "u-boot"; reg = <0x0 0x40000>; read-only; }; partition@40000 { label = "u-boot-env"; reg = <0x40000 0x40000>; read-only; }; factory: partition@80000 { label = "factory"; reg = <0x80000 0x40000>; read-only; }; partition@c0000 { label = "firmware"; reg = <0xc0000 0x740000>; }; }; }; };
      
      





ファームウェア、そして突然すべてがロードされた、ハレー!



デバイス正常な起動のログ



その結果、それだけです。ルーターはOpenWRTで問題なくクラッシュしました。 当然、DSLは機能しませんが、他のすべては元のファームウェアよりもうまく機能します。 ケースの表示でさえ正常に機能しました。



この記事は、新しいデバイスでOpenWRTを実行すること(プラットフォームがサポートされている場合)が非常に簡単であることを示すために書かれています。誰かがデバイスのOpenWRTポートを作成するのに役立つことを願っています。



All Articles