1757327232
2025-09-07 23:53:00
少しの背景として、私の趣味の1つは、1990年代に個人、中小企業、BBSオペレーターなどの間でかなり人気のあるバックアップメディアであったQIC-80テープなど、古いテープカートリッジから人々がデータを回収するのを支援することです。テープメディアのソフトスポットがあります。これらのテープを私の手に持っているという触覚感覚について何かがあります。 qic テープは、多くのデザインの欠陥で有名です。慎重な検査と再調整により、これらのテープのデータは、これらすべての年の後でも、完全に回復可能です。
回復のためにQIC-80テープを受け取るたびに、適切なテープドライブが取り付けられている古いPCワークステーションの1つを電源で送り、非常に 古いバージョン Linux(すなわちCentos 3.5)の場合、これが唯一の使用方法であるため ftape ドライバーは、このテープドライブと通信するために必要なカーネルドライバーであり、ユーザーがテープのバイナリコンテンツをダンプできるようにします。
ご覧のとおり、これらのテープを読むドライブは フロッピーコントローラー マザーボード上。この巧妙なハックは、コスト削減の尺度として行われました。別のSCSIアダプター(高層テープメディア用の標準インターフェイス)を購入する代わりに、このテープドライブをフロッピーコントローラーに接続するだけで、ほとんどのPCで利用可能でした。同じリボンケーブルで、既存のフロッピードライブと一緒に動作することもできます!もちろん、トレードオフは、データレートが500 kbpsのようなフロッピーコントローラーの速度によって制限されることです(これはバイトではなく、キロビットです)。
もう1つの欠点は、フロッピーコントローラーを介したこれらのテープドライブと通信するためのプロトコルが非常に乱雑で非標準であり、あまりよくサポートされていないことです。それはあらゆる意味で「ハック」でした。マザーボードのBIOSにはテープドライブが接続されていることの知識はありませんでした。また、ハードウェアI/Oポート、タイミング、割り込みなどを操作する方法を正確に知るのはエンドユーザーソフトウェア次第でした。

これらのドライブを扱うためのMS-DOSおよびWindows 3.x/9x用の少数の独自のツールがあり、Linuxのオープンソースの実装は1つだけでした。 ftape。もちろん、これらの元のDOS/Windowsツールを使用してテープを読むことは可能ですが、実際にはそれだけです ftape これにより、どの独自のソフトウェアが最初に書いたかに関係なく、テープの「生の」バイナリコンテンツを読むことができます。そのため、内容を捨てて、その後、独自の論理フォーマットを解読し、そこからファイルを抽出することを心配することができます。
問題は、 ftape ドライバーは、ほぼ2000年以来サポートされておらず、このためにLinuxカーネルからすぐに削除されました。これが、これらのドライブのいずれかで作業しなければならないときに、痛々しいほど古いバージョンのLinuxを実行する必要がある理由です。もしそうならそれは素晴らしいでしょう ftape 提供されるすべての利点とアフォーダンスを備えた最新のディストリビューションに取り組みました。
***
数週間前、Claude Codeに簡単なリクエストをすることが私に起こりました。
> This repository is a Linux kernel driver that communicates with legacy tape drives connected to the floppy
controller (FDC) on the motherboard. Unfortunately, this driver hasn't been maintained for a long time, and
can only compile under kernel version 2.4. I'd like to modernize this driver, allowing it to be built with
the latest versions of the kernel.
● I'll help you modernize this Linux kernel driver for legacy tape drives. This is a significant task that
will require updating the code to work with modern kernel APIs and conventions.
そして、「コンボブレーション」のいくつかの反復と、クロードが主張するものは何でも、私は突然、エラーなしでコンパイルされているカーネルドライバーを持っていました。これは、Claudeがコンパイラの出力を取得し、コンパイルが正しく機能するまでそれ自体に戻すことができるためです。カーネルバージョン2.4とバージョン6.8の間で経過した永遠に、当然のことながら非推奨または交換されたカーネル関数と構造のランドリーリストがありました。驚くべきことに、クロードはすべての時代遅れのビットを見つけて、それらを正しい現代の同等物に置き換え、コードの手動のタッチアップをほんの少しだけ必要としました(これについてはもう少し)。
ただし、この時点では、カーネルドライバーは完全なカーネルツリーの一部としてコンパイルされると予想されていましたが、スタンドアロンロード可能なカーネルモジュールになりたかっただけです。わかりました、問題ありません:
> Is there a way to compile just this module in-place, instead of copying it into a kernel source tree?
● Yes! You can compile kernel modules out-of-tree without copying them into the kernel source. Let me create
a proper standalone build system for the ftape driver.
…そしてそれはそうしました。それ以上のプロンプトなし。この段階の終わりに、私は負荷可能なカーネルモジュールを持っていました(.ko)実際のライブハードウェアで使用しようとすることができたこと。当然のことながら、モジュールはまだ「動作」していませんでした – ロードしていましたが、テープドライブと正しく通信することを妨げていました。しかし、私は押し付けました。
この時点から、カーネルモジュールにロード/アンロードするにはsudoが必要なため、このような機密操作自体を「反復」することはできませんでした。幸いなことに、 ftape ドライバーはすでにロギングメッセージをgeneしみなく振りかけていました(printk() 印刷された呼び出し dmesg)、だから私はモジュールを自分でロードし、の出力を繰り返し貼り付けました dmesg 手動でクロードに入り、クロードに、以前に成功したテープ読み取りから保存した「既知の」dmesgログと比較してください。これのいくつかの反復の後、クロードは、モジュールがハードウェアと通信するのを妨げる残りの問題を特定しました。
● Perfect! The module has parameters that can be set. The issue is that without configuration, all the base
addresses default to -1, which gets converted to 0xffff in the config function, causing the detection to fail.
● The "No such device or address" (ENXIO) error occurs because the ftape-internal module is not configured
with the correct I/O port base address for your floppy controller.
The issue is in fdc-internal.c:735-737: if fdc->sra == 0xffff, it returns -ENXIO. Since no configuration was
provided, all values default to -1, which becomes 0xffff....
そして最後に、a)ロード、b)テープドライブを検出し、c)テストテープの内容をダンプできるカーネルモジュールを持っていました!

***
を使用して ftape モダンなカーネルのドライバーは、私が絶望的に手の届かないところにあると思った偉業は、 突然完了しました 2晩の間に。
巨大な注意事項として、カーネルモジュールを扱う以前の経験が少しあり、一般的にCでの経験が十分にあることに注意する必要があります。そのため、このシナリオでクロードの成功を誇張したくありません。同様に、そうではありませんでした 文字通り Claudeに機能するカーネルモジュールをうんちするための3つのプロンプトが、むしろいくつかの前後の会話と、はい、コードのいくつかの手動修正を行います。そうなるでしょう 絶対にそうではありません カーネルモジュールの内部に関するベースラインの知識なしにこの近代化を実行できます。
これにより、私たちの現在の瞬間にそのようなコーディングエージェントとの作業に関するいくつかの考えを結晶化することになりました。
これらのツールとの本物のコラボレーションに自分自身を開きます。
クロードコードとの対話は、仲間のエンジニアとの実際のコラボレーションのように感じました。人々はそれを「ジュニア」エンジニアとの仕事と比較したいと思っています。それは非常に正確だと思います。このため、あなた(人間)は依然としてガードレールを提供し、製品の決定を下し、建築ガイドラインを実施し、潜在的な問題をできるだけ早く見つけなければなりません。
可能な限り具体的であること、タスクにドメイン固有のキーワードを必ず使用してください。
私は突然迅速なエンジニアリングの専門家になると主張していませんが、私が最も成功したことがわかったプロンプトは、特徴の口頭での足場を明確にレイアウトするものであり、LLMが埋めるべき足場のギャップを説明します。
エージェントが完了するために「適切に」のようなタスクの種類の直感を開発します。
これらのエージェントは魔法ではなく、文字通りあなたが尋ねるすべてをすることはできません。あなたがそれが十分に適していない何かをするようにそれを頼むならば、あなたはそれらが輝くことを許可する前に、これらのツールを時期尚早に拒否することになります。この点で、LLMSが実際にどのように機能するかを学ぶことは有用です。そうすれば、あなたは彼らの強みと 弱点。
これらのツールを、独自のスキルの大規模な力の乗数として使用してください。
私が本当に望んでいたら、私は自分でこの近代化の努力をすることができたと確信しています。しかし、それは私がカーネルの開発を学ぶ必要があったでしょう 25年前に行われたように。これはおそらく私に数週間のノンストップの熟したドキュメントをかがめたでしょう。 完全に役に立たない知識 今日。それのすべての代わりに、私は数日間エージェントとチャットし、それがすべてのことを説明してもらいました。
当然、私はそれが行った変更を確認してテストしました、そしてその過程で私は最終的に膨大な量のことを学ぶことになりました 実際に便利です 私にとって、現代のカーネルの慣習、X86アーキテクチャのいくつかの興味深い詳細、そして私が武器庫に維持するいくつかのコマンドラインの呪文など、将来私にとって。
これらのツールを使用して、新しいフレームワークに迅速にオンボーディングします。
私はどんなストレッチもカーネル開発者ではありませんが、この特定の経験は、より多くのカーネルレベルの作業につながる可能性のある火花に火をつけ、カーネルの開発は聞こえるほど難しくないことがわかります。別の無関係な「バイブコーディング」セッションでは、以前にフラッターを使用せずにフラッターアプリを構築しました。あなたが私のようであり、学習スタイルが学習することである場合、これらのツールは新しいフレームワークを学習するというあなたのペースを根本的に加速し、より高いレベルのアーキテクチャの思考をするためにあなたを解放することができます。
***
いずれにせよ、ずっと旋回して、私は今それを言ってうれしいです ftape 住んでいます!最後の公式リリースから25年後、それは再びモダンなLinuxで構築可能で使用可能です。私はまだいくつかの調整と新機能の追加を行う過程にありますが、フロッピーベースのテープドライブで動作することをすでに確認しています 私のコレクション、また、それがサポートする並列ポートベースのドライブと同様に。

物理セットアップは非常によく似ていますが、OSはCentos 3.5の代わりにXubuntu 24.04になりました! 🎉
次回まで!
#Claudeコードを使用して25歳のカーネルドライバーを近代化する #Dmitry #Brant