Linux システムの busybox に mkfs.vfat コマンドを移植する

Linux システムの busybox に mkfs.vfat コマンドを移植する

オーディオおよびビデオ ファイルを保存するためのディスク寿命を延ばすには、ディスクをフォーマットするときに、より大きなクラスター サイズを設定することをお勧めします。保存されるオーディオ ファイルとビデオ ファイルは比較的大きいため、クラスター サイズを可能な限り大きく設定し、スペースをあまり浪費せずにディスク データ読み取りのパフォーマンスを向上させることができます。

しかし、デバイスの mkfs.vfat は、クラスター サイズを設定するための -s パラメーターをサポートしていないことがわかりました。

そこで、mkfs.vfat を再移植する予定です。

アイデア 1

ビジーボックスの再報告

1. 公式サイトから最新のbusyboxソースコードをダウンロードする

2. Makefileを変更する

ARCH = 腕

CROSS_COMPILE = /opt/hisi-linux-nptl/arm-hisiv100-linux/target/bin/arm-hisiv100nptl-linux- 

2.メニュー構成を作成する

静的ライブラリとして設定

3.作る

エラーが発生しました

作成: *** [busybox_unstripped] エラー 1
root@chenwr-pc:/home/soft/busybox-1.31.0# 作成する
 リンク busybox_unstripped
リンカーは --sort-section,alignment をサポートしていません
リンカーは --sort-common をサポートしていません
glibc に対する静的リンク、--gc-sections は使用できません
ライブラリを試す: crypt m resolv
失敗: -Wl,--start-group -lcrypt -lm -lresolv -Wl,--end-group
出力:
/opt/hisi-linux-nptl/arm-hisiv100-linux/target/bin/arm-hisiv100nptl-linux-wall -wshadow -wwrite-strings-wundef-wstrict-prototy WDECLARATION-AFTER-STATEMENT -WOLD-STYLE-DEFINITION -FNO-BUILTIN-STRLEN -FINLINE-LIMIT = 0 -FOMIT-FOINTER-FUCTACTIONS-FDATA-SECTIONS -FNO-GUESS-BRANCH-PRANCH-FUNSINED-CHAR-LIBGCC -FALIGN-FALIGN-FALIGN-FALIGN-FALIGN-FALIGN-FALINC 1-FALIGN-LOOPS = 1 -FNO-UNWIND-TABLES -FNO-ASYNCHRONOUS-UNWIND-TABLES -FNO-BUILTEN-PRINTF -OS -STATIC -MARCH = ARMV7L -O BUSYBOX_UNSTRIPT-WL、​​ -  Start-Group Applets/Borting-in.o Arcival/lib.a Archive/lib.a ils/libcoreutils/lib.a debianutils/lib.a klibc-utils/lib.a e2fsprogs/lib.a editors/findutils/lib.a init/lib.a libbb/lib.a libpwdgrp/ ils/lib.aネットワーキング/lib.aネットワーキング/libiproute/lib.aネットワーキング/udhcp/lib.a printutils/lib.a procps/lib.a runit/lib. ival/libarchive/bedintin.o Console-Tools/bordin.o coreutils/bedintin.o coreutils/libcoreutils/bedintin.o debianutils/bedintin.o klibc-utils/build.o .o loginutils/bedintin.o mailutils/builtin.o miscutils/bortin.o modutils/bedutin.oネットワーキング/bedintin.oネットワーキング/libiproute/bedintin.oネットワーキング/udhcp/bedintin.o printin.o/buildin.o selin. util-linux/bilding.o util-linux/volume_id/bildingin.o -wl、 -  end-group -wl、 -  start-group -lcrypt -lm -lresolv -wl、 -  end-group
==========
networking/lib.a(ipcalc.o): 関数 `ipcalc_main' 内:
ipcalc.c:(.text.ipcalc_main+0x24c): 警告: gethostbyaddr は廃止されました。代わりに getaddrinfo() を使用してください。
libbb/lib.a(inet_common.o): 関数 `INET_resolve' 内:
inet_common.c:(.text.INET_resolve+0x60): 警告: gethostbyname は廃止されました。代わりに getnameinfo() を使用してください。
coreutils/lib.a(mktemp.o): 関数 `mktemp_main' 内:
mktemp.c:(.text.mktemp_main+0x8c): 警告: `mktemp' の使用は危険です。`mkstemp' を使用することをお勧めします。
networking/lib.a(nslookup.o): 関数 `add_query' 内:
nslookup.c:(.text.add_query+0x70): `res_mkquery' への未定義の参照
networking/lib.a(nslookup.o): 関数 `send_queries' 内:
nslookup.c:(.text.send_queries+0x2d0): `__ns_initparse' への未定義の参照
nslookup.c:(.text.send_queries+0x308): `__ns_parserr' への未定義の参照
nslookup.c:(.text.send_queries+0x480): `__ns_get16' への未定義の参照
nslookup.c:(.text.send_queries+0x5cc): `__ns_get32' への未定義の参照
nslookup.c:(.text.send_queries+0x5e4): `__ns_get32' への未定義の参照
nslookup.c:(.text.send_queries+0x5fc): `__ns_get32' への未定義の参照
nslookup.c:(.text.send_queries+0x614): `__ns_get32' への未定義の参照
nslookup.c:(.text.send_queries+0x628): `__ns_get32' への未定義の参照
util-linux/lib.a(fallocate.o): 関数 `fallocate_main' 内:
fallocate.c:(.text.fallocate_main+0x80): `posix_fallocate' への未定義の参照
util-linux/lib.a(unshare.o): 関数 `unshare_main' 内:
unshare.c:(.text.unshare_main+0x1ec): `unshare' への未定義の参照
collect2: ld は 1 の終了ステータスを返しました
注意: ビルドに追加のライブラリが必要な場合は、CONFIG_EXTRA_LDLIBS に配置します。
例: CONFIG_EXTRA_LDLIBS="pthread dl tirpc Audit pam"
作成: *** [busybox_unstripped] エラー 1

menuconfig を再作成し、設定を入力し、エラーを報告するモジュールを閉じてチェックを外します。

インターネット上の記述を参考にすると、まだ多くの誤りがあります。また、他のコマンドに影響する恐れがあるため、ネットワーク関連の機能やシステム構成の多くをシャットダウンしました。 ls コマンドなどの元の移植された busybox は、個別の bin ファイルではないことがわかったためです。代わりに、busyboxにソフトリンクされています

そして、デバイスのスペースが限られていることがわかりました。元のbusyboxは800k以上しかなく、新しい移植が成功したとしても2M以上かかります。そこで考えを変えて、ソースコードだけからmkfs.vfatを移植しました

これでコマンドの移植は完了です。

要約する

上記は、Linux システムの busybox に mkfs.vfat コマンドを移植する方法について紹介したものです。お役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • Dockerはbusyboxを使用してベースイメージを作成します
  • Telnet は Alpine イメージの busybox-extras に移動されました
  • Androidデバイスがawkコマンドを認識せず、busyboxがない場合の対処方法

<<:  MySQL における主キーが 0 であることと主キーの自己選択制約の関係についての詳しい説明 (詳細)

>>:  Vue 開発ガイドの重要な知識の要約

推薦する

MySQL の current_timestamp の落とし穴とその解決策を共有する

目次MySQL の current_timestamp の落とし穴エラーを報告する私の解決策mysq...

MySQLトランザクションとMySQLログの詳細な説明

取引特性1. アトミック性: トランザクションの開始後、すべての操作が完了するか、まったく実行されな...

Docker はクラスター MongoDB 実装手順を構築します

序文会社の業務上のニーズにより、独自の MongoDB サービスを構築する予定です。MongoDB ...

Docker Nginxコンテナの制作と展開の実装方法

クイックスタート1. Docker Hubでnginxイメージを見つけるdocker 検索 ngin...

1 つの記事で Nginx ロケーション マッチングの実装を理解する

チームはフロントエンドとバックエンドを分離しているため、フロントエンドが Nginx とノード層を引...

PHP で JSON バックスラッシュを削除する例

1. 「stripslashes($_POST['json']);」メソッドを使用し...

MySQL 5.7.17 のインストールと設定方法のグラフィック チュートリアル (Ubuntu 16.04)

公式 MySQL Web サイトから Ubuntu Linux 用の最新バージョンの MySQL を...

適応分析と応答分析の違いを専門用語で詳しく説明

日々の開発経験と関連するオンライン情報に基づいて、アダプティブとレスポンシブの違いをシンプルでわかり...

MySQLスレーブライブラリの復元の実践記録

状況の説明:今日、MySQL データベースのスレーブ ノード ホストにログインしたところ、/var/...

CSSアニメーションを使用して背景のシームレスな無限ループを実装する例

1. 需要絵が左から右へ無限ループで動く2. コードモバイルデバイスに適用されているため、rem 単...

Linux でハイパースレッディング技術を動的に有効/無効にする方法の詳細な説明

序文Intel のハイパースレッディング テクノロジーにより、1 つの物理コア上で 2 つのスレッド...

Mysql の大きな SQL ファイルの高速リカバリ ソリューションの共有

序文MySQL データベースを使用する過程では、データベースのバックアップと復元が必要になることがよ...

一般的な JavaScript メモリ エラーと解決策

目次1. タイマー監視2. イベント監視3.オブザーバー4. ウィンドウオブジェクト5. DOM参照...

Dockerでプロジェクトを実行する方法

1. プロジェクトwarが保存されているディレクトリを入力しますDockerfileを編集する vi...