質問: /dev/ptyファイルはどうやって作るの freebsd初心者です(2ヶ月:freebsd 10.0-release)。 開発環境を構築しようと思い、dddをインストールしたのですがうまくいきません。 1.dddを起動すると: $> ddd gdb: cannot open master pty: そのようなファイルまたはディレクトリはありません gdb: communication setup failed メッセージが表示され、dddウインドウは表示されますが(gdb)プロンプトがいつまで経っても表示されません。 2.dddとgdbの通信を確立できないようで、ログファイルを参照しても: running gdb (pid xxxx, tty /dev/ptyxx)... などのgdb起動完了のメッセージがありません。 3.デバッグ $> gdb ddd によりgdb上でdddを起動し、原因を調査すると: /dev/ptyxx ファイルをオープンしようとしているが失敗する、という現象のようです。 実際に/devディレクトリには"pty*"ファイルは存在しません。 4.webや「freebsdハンドブック」を参照すると、『makedevを使ってデバイスファイルを作成する』...『makedevスクリプトは削除された、代わりにmknodを使え』...『devfs......』.....等と書いてありますが、mknodあたりからどうしたらよいのか判らなくなりました。 デバイスファイル(/dev/pty)の作成方法をご教授ください。
回答: makedev や mknod は記述が古いです。昔は、「デバイスファイル」を手動で生成する必要があったため、登録されたデバイスに合わせて makedev や mknod を使う必要がありました。 今では、 /dev は devfs が管理しており、「カーネルが把握しているデバイスは自動的に /dev に現れる」ようになっています。そのため、デバイスファイルの作成作業は必要ありません。 デバイスファイルは自動で作られるものですから、「デバイスファイルがない」という問題が起きた場合、「デバイスファイルを作る方法を模索する」のではなく、「カーネルに必要なデバイスを認識させる方法を模索する」必要があるということになります。 で、解決方法なのですが、root権限で # kldload pty を実行してください(カーネルに pty モジュールを読み込ませる)。これでdddが使えるようになると思います。 (これは、os起動時に毎回実行する必要があります。日常的にdddを使うのでしたら、 /boot/loader.confに pty_load="yes" という記述を追加してください。それで、毎回起動時に自動的にptyモジュールが読み込まれるようになります) なお、以下、そのものずばりの質問とその回答が議論されています。 https://forums.freebsd.org/threads/ddd-1-debugger-connection-problems.48307/