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 開発ガイドの重要な知識の要約

推薦する

よく使用される Linux コマンドの完全なリスト (推奨コレクション)

目次1. システム情報2. シャットダウン(システムのシャットダウン、再起動、ログアウト) 3. フ...

jQueryは何に使われるのですか?jQueryは実際にはjsフレームワークです

jQuery 入門jQuery ライブラリは、簡単なマークアップ行を使用して Web ページに追加で...

React でのポータルとエラー境界処理の実装

目次ポータルエラー境界処理エラー境界を使用しない場合はどうなりますか?注記ポータルスロットとも言えま...

ページデザインにおけるテーブルとdivの適切な適用についての簡単な説明

この記事の冒頭で、以前書いた入門記事の間違いを訂正したいと思います。初心者を再び誤解させないように、...

MySQLデータベースのタイムアウト設定を構成する方法の例

目次序文1. JDBCタイムアウト設定2. 接続プールのタイムアウト設定3. MyBatisクエリの...

WeChatミニプログラム開発のためのコンポーネント設計仕様

WeChat ミニプログラム コンポーネント設計仕様コンポーネントベースの開発という考え方は、私の開...

Windows に Docker をインストールする詳細なチュートリアル

ローカルの MySQL バージョンが比較的低いため、最近 MySQL のバージョンをアップグレードす...

Nginx の一般的な設定とテクニックの概要

序文この記事では、Nginx の一般的な、実用的で興味深い構成をいくつか紹介します。この記事を読んだ...

ドメイン名を nginx サービスにバインドする方法

nginx.conf で複数のサーバーを設定します。 http リクエストを処理する際、nginx ...

React useMemo と useCallback の使用シナリオ

目次メモを使うコールバックの使用メモを使う親コンポーネントが再レンダリングされると、そのすべての要素...

JS配列重複排除の詳細

目次1 テストケース2 JS配列重複排除4種類2.1 要素の比較2.1.1 二重層 for ループ比...

HTML における li タグの水平配置の例

ほとんどのナビゲーション バーは、下の図に示すように水平に配置されていますが、これはどのように実現さ...

VmWareでcentos7をインストールするときにインターネットにアクセスできない問題の解決策

Centos7 のインストール時に VmWare がインターネットにアクセスできない場合はどうすれば...

CSS グリッドレイアウトの完全ガイド

Grid は 2 次元のグリッド レイアウト システムです。これを使用すると、本質的にはハック メソ...