Olinuxinoのシャーマニズムまたはカスタムファームウェアの芸術。 カーネルとUbuntuパート3

カーネルアセンブリ


既存の画像が適切でない理由を説明します。 彼らの主な問題は、それらが古い3.4カーネル上に構築されていることであり、これにより、コンパイラーの最大バージョン4およびubuntu 12.04にすぐに制限が課せられます。 したがって、最新のソフトウェアとライブラリを使用する場合は、最新のカーネルを再構築する必要があります。 もちろん、ソースでgccの少なくともバージョン5のコンパイルに関する制限を削除し、バージョン4でビルドできるようにコードを修正することはできますが、これはまだがらくたです。 私たちの場合、Linuxのグラフィック部分が不要であるという事実は言うまでもありません。

kernel.orgの使用を開始するために、4.14.57カーネルを送り出しました;その時点では、それは最後の安定バージョンでした。

ソースフォルダーで、構成を開始するスクリプトを作成します。

#!/bin/sh make O=../olimex-kernel-4.14.57 #      -j2 #     ARCH=arm #      CROSS_COMPILE=arm-linux-gnueabihf- #   xconfig #   

次のようなものが得られます。



/linux-4.14.57/arch/arm/configs/のファイルメニューで/linux-4.14.57/arch/arm/configs/ファイルを選択します。sunxiシリーズプロセッサの基本設定があります。 そして、いくつかの設定を追加する必要があります。 つまり 指定されたフラグの下を検索して設定します。

可能な限りカーネルにすべてを埋め込みます。

CONFIG_BLK_DEV_INITRD-代わりにramfsを使用せず、Auf(高度な多層統合ファイルシステム)を起動します。 つまり、チェックボックスを削除します。
CONFIG_MEMCG-内部のすべてのものと同様にオンにします
CONFIG_BLK_CGROUP-オンにする
CONFIG_CGROUP_DEVICE-オンにします
CONFIG_CGROUP_CPUACCT-オンにします
CONFIG_CGROUP_PERF-内部のすべてのものと同様にオンにします
CONFIG_EXPERT-すべてを選択してデフォルト内に残します
CONFIG_BLK_WBT-内部のすべてのものを選択
CONFIG_PARTITION_ADVANCED-内部を選択
CONFIG_SUN_PARTITION-選択
ARCH_SUNXI-内部ではMACH_SUN5Iのみを残します

USB wifiではPCIバスのサポートが必要なため、バスサポートでCONFIG_PCIを選択します。 明らかに、wifiサポートが有効な場合、カーネルはpciバスを必要としませんが、このwpaがないと、サプリカントはusb wifiを見つけません。 なぜこれが起こるのか、歴史の深さを調べることができますが、すべてから判断すると、それは歴史的に起こりました。一般に、これを知って覚えておく必要があります。

CONFIG_CPU_FREQ_STAT-検索して選択
CONFIG_NET内でWIRELESSを選択してからCONFIG_CFG80211を選択し、そこでCONFIG_NL80211_TESTMODEおよびCONFIG_CFG80211_WEXTをマークします。後者にはサプリカント用のwifiドライバーが含まれます。
CONFIG_MAC80211-ネットワークスタックをオンにします。
CONFIG_MAC80211_MESH-オンにする
CONFIG_MAC80211_LED-さて、これを選択しましょう
CONFIG_NFC-CONFIG_NFC_NCI以外の内部のものも含めます。
CONFIG_PARPORT-オンにする
CONFIG_LED_TRIGGER_PHY-選択
CONFIG_REALTEK_PHY-選択
CONFIG_WLAN-選択
CONFIG_RTL8XXXU-CONFIG_RTL8XXXU_UNTESTEDを選択してマークします。
CONFIG_SERIO_SUN4I_PS2-オンにする
CONFIG_SERIAL_DEV_BUS-オンにして、内部でSERIAL_DEV_CTRL_TTYPORTを選択します。
CONFIG_USB_WUSB_CBAF-有効
CONFIG_USB_WUSB_CBAF_DEBUG-オンにします
CONFIG_USB_WDM-オンにします
CONFIG_USB_SERIAL-選択
CONFIG_UWB-選択して内部でCONFIG_UWB_HWAとCONFIG_UWB_I1480Uを選択すると、CONFIG_USB_WUSBが表示され、選択されます。
CONFIG_STAGINGを選択し、内部でドライバーCONFIG_RTL8192UおよびCONFIG_RTLLIBを選択し、最後の内部ですべてを選択します。 それらは、後で詩によってモジュールによってマークされ、後で別々にねじ込まれなければなりません。
CONFIG_R8188EU-選択

一般に、これは必要な最小限のカーネル設定です。突然他の何かを有効にしたい場合は、このパラメーターの依存関係を注意深く読んでください。そうしないと、コンパイル時にエラーが発生します。 次に、コンパイルを開始する必要があります。

 make O=../olimex-kernel-4.14.57/ -j2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage #   modules #   LOADADDR=0x40008000 #        

同時に、デバイスツリーファイルを収集してください:

 make O=../olimex-kernel-4.14.57 -j2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs 

これは、ソースファイルがカーネルとubootで同じであってもエラーになる可能性があるためです。 したがって、一方ではなく他方が機能します。

次のステップは、SDカードの最初のセクションで収集されたファイルを収集することです。
- /olimex-kernel-4.14.57/arch/arm/boot/ - /olimex-kernel-4.14.57/arch/arm/boot/ - /olimex-kernel-4.14.57/arch/arm/boot/ここからアセンブルされたカーネルを取得します。これはuImageと呼ばれ、重量はわずか4.7メートルです。
- /olimex-uboot/arch/arm/dts/ここからコンパイル済みツリー、ファイルsun5i-a13-olinuxino.dtbを取得します
- /u-boot-2018.05/ - /u-boot-2018.05/ - /u-boot-2018.05/ここから、コンパイルされたブートスクリプトboot.scrを取得します。

Ubuntuビルド


rootfsをダウンロードするために必要なすべての部品が準備されているため、ubuntuをビルドする必要があり、このために最新バージョン18.04を使用します。

まず、ルートディレクトリにフォルダーを作成します。

 sudo mkdir /destrupt 

後でchrootを適用するには、ルートディレクトリの場合と同様に完全な権限が必要であるか、他のフォルダのchroot構成を登録する必要があるためです。 要するに、ルートディレクトリにフォルダーを作成する方が簡単であり、設定にだまされません。

アセンブリには、次のパッケージが必要です。そうでない場合は提供する必要があります。
-Qemu-user-static
-debootstarp
-シュルート

次に、ubuntuビルドを実行します。

sudo qemu-debootstrap #qemuはubuntuアセンブリとともにインストールされるため、qemuを使用します。これにより、アセンブルされたバージョンのubuntuでchrootをすぐに実行できます。
--arch armhf #プロセッサアーキテクチャのタイプ
--variant=minbase #最小バージョンのアセンブリ
bionic #ビルドバージョン18.04
/destrup/ #収集するアドレス
http://ports.ubuntu.com/ubuntu-portsソースを収集する場所

さて、ubuntu 18.04はすでに組み立てられています。次は、段階的な設定を開始します。

1.開始する前に、/ destrup / etc / apt /に移動し、sources.listを編集して、次を追加します。

 deb http://ports.ubuntu.com/ubuntu-ports bionic main restricted deb http://ports.ubuntu.com/ubuntu-ports bionic universe deb http://ports.ubuntu.com/ubuntu-ports bionic multiverse 

これらは、プロセッサのディストリビューションの単なるソースです。

2.新しく作成したdistrib ubuntuでルートの変更を実行します。

 sudo chroot /destrup 

まず、rootユーザーのパスワードを設定します。

 passwd root 

このパスワードは、ブート時にログインするために必要です。

3.次のパッケージをインストールします。

apt updateパッケージの更新

ネットワークのパッケージをリストします: iputils-ping, dhcpcd5, iproute2, iw, networkd-dispatcher, wireless-tools, net-tools.

ネットワークシステムパッケージ: linux-firmware, wpasupplicant, systemd, hostapd, kmod, udev.

それでは、nano、mc、usbutils、sudoのすべてを編集して構成するのが便利だったので。
さらに説明するわけではありませんが、あと2、3の記事で説明します。セットアップに必要なパッケージをいくつか見ていきます。

WPAサプリカントの構成。


まず、usb wifiとは何かを簡単に分析します。

wifi(この場合はrtl8188)を提供するチップ自体は、データとusbへのアクセスの特別なプレゼンテーションを備えた、台無しにされたADCです。 つまり ロードされたr8188eu.koモジュールなしでlsmodコマンドを実行すると、誰かがusbポートを使用していることがわかります。 モジュールをロードすると、デバイスの名前がす​​でに表示されます。つまり、このモジュールはこのチップを制御するためのプログラムインターフェイスにすぎません。

次に重要なライブラリは、IEEE 802.11標準そのものであるlib80211.koです。簡単に言えば、デジタルエーテル信号を特定のイーサネットプロトコルの表現に変換することです。 ただし、これをすべて管理するには、linux-firmwareをインストールする必要があります。これには、これをすべて実行する-wext-ドライバーが含まれます。 サプリカントでさらに接続します。

サプリカント設定を開始しましょう。

次のアドレスで、収集したばかりのubunteに登ります。

 / etc / wpa_supplicant / wpa_supplicant.conf 

そして、構成ファイルを作成します(存在しない場合)。このタイプに修正します。

 ctrl_interface_group=0 #        ctrl_interface=/var/run/wpa_supplicant #       #       usb  #      ap_scan=1 #wpa_supplicant   ,  - network={ ssid="SSID_" psk=" " key_mgmt=WPA-PSK #   proto=WPA2 pairwise=CCMP } 

すべてが正しく構成され、上記のモジュールがロードされると、構成で指定されたアドレス(ctrl_interfaceパラメーター)にデバイスファイルが作成されます。

システム設定


サプリカントを設定しましたが、実行する人はまだいません。 もちろん、network-managerをインストールして自動チューニングを楽しむこともできますが、どこがハードコアで、どこがゴミです。 一般的に、全くの退屈。

したがって、アドレスに登ります:

 / etc / systemd / system/ 

そして、ここでnetwork-wireless.serviceという名前のファイルを作成します。ない場合は、編集を開始します:

 [Unit] #       Description=Wireless network connectivity Wants=network.target After=sys-subsystem-net-devices-wlx007005012449.device Before=network.target BindsTo=sys-subsystem-net-devices-wlx007005012449.device [Service] #    Type=oneshot RemainAfterExit=yes ExecStart=/sbin/ifconfig wlx007005012449 up #   ExecStart=/sbin/wpa_supplicant -B -i wlx007005012449 -D wext -c /etc/wpa_supplicant/wpa_supplicant.conf #   ExecStart=/sbin/dhcpcd wlx007005012449 #  dhcp   [Install] WantedBy=multi-user.target 

サプリカントの起動について説明します。

ExecStart=/sbin/wpa_supplicant #サプリカントにアクセスするためのパス
-B #バックグラウンドで実行
-i wlx007005012449 #同じデバイスファイルを起動するためのインターフェイス
-D wext #linux-firmwareのホイッスルのドライバー名
-c /etc/wpa_supplicant/wpa_supplicant.confサプリカント設定ファイルのアドレス

さて、一般に、必要なものはすべて設定されているので、モジュールのインストールに進みます。

モジュールのインストール。


モジュールをインストールするには、カーネルソースのあるフォルダーに少し戻って、コマンドを実行して、カーネルからubuntuのあるフォルダーにモジュールをコピーします。

 make O=../olimex-kernel-4.14.57 -j2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install #     INSTALL_MOD_PATH=/destrup #    

その後、すべてのアセンブルされたモジュールは、次の場所のubuntuにコピーされます。

 / lib / modules / 4.14.57 / kernel 

ここで最も重要なことは、コピーされたモジュールの起動とそのすべての依存関係を登録することです。そのため、アドレスに登ります。

 / etc / modules 

編集するためにモジュールファイルを開いて実行し、次のモジュールを追加します。

 michael_mic r8188eu #   r8192e_pci rtllib rtllib_crypt_ccmp rtllib_crypt_tkip rtllib_crypt_wep r8192u_usb # lib80211 #   IEEE 802.11 

これで、組み立てられたすべてのubuntuを、前の記事でubuntuのセクションとしてマークされたsdカードセクションにコピーしたままになります。

その後、USBフラッシュドライブをボードに挿入し、電源を入れてその上に座り、その管理にアクセスしたり、sshでアクセスしたりできます。 systemdにコマンドを追加して、一般にIPアドレスまたはその他の構成を設定できます。その後、他のすべてがあなたの手にあります...

記事の最初の部分
記事の第二部

Source: https://habr.com/ru/post/J435586/


All Articles