diaryYasuharuNetTopDiaryAVRの書き込み基板(その1)今さらAVRの書き込み基板を作ってます。ワンボードにAVRを2個乗っけて、モニタ用(マスタ)とプログラム実行用(スレーブ)のそれぞれで使用して、PCからUSB1本でプログラムの書き込みから実行までできるような基板です。基板の詳細についてはまた別の機会に書くことにして、早速失敗に気づいたので、まずはそちらから...。UARTからデータの送受信をするプログラムを作成して実行してみるも、何かうまく行かない。オシロで見てみるとボーレート自体は問題なさそうだし...って、なんでマイナスの電圧が?というので気づきました、レベル変換入れてない...。いう設計でも(仕様通りなら)良かったんですが、少なくとも今使っているUSBシリアル変換はRS-232Cのレベルでしか受けてくれません(なので仕様通りじゃない)。いうときのため、以前にMAX232を使ったレベル変換基板を作ったので、それを使ってみることに。これもこれでよく調べてみると、この基板は電源をマイコン側から取るようになっている(当然RS-232Cのコネクタにも電源はないので、MAX232を動かすための電源が取れない)。GNDの3線しか出していません(ここにVCCがあれば解決する問題だった)。うーん...ダメじゃん。なるとCMOSレベルで受けられる、USBシリアル変換を買うか、あるいは作るかになりそうです。model)を購入しました。電子部品を買う必要があり一緒に通販で購入しました。当面の用途はローカルのDNSリゾルバにすること。ルータがEDNS0に対応していないためGoogleのDNSを使っているのですが、いくらレスポンスが早いと言っても、やっぱりローカルでDNSは持ちたい。あと、ローカルに常時電源入ったデバイスがほしかったというのも理由。買うときに少し悩んだのが発熱がどうなのかという点。購入直後の状態で確かめてみたところ、以下の通りでした。measure_temp2temp=63.0'Cちょっと高いかな...。ちなみに、1コアだけCPUに負荷をかけると以下の通り。measure_temp5temp=69.0'C室温が23度の条件で上記なので、夏場は厳しいかも...。arm2frequency(48)=600117184一方で高負荷時は1.5GHzで動作している。arm2frequency(48)=1500398464気休めにヒートシンクはつけてみたものの、あまり変わらず...。うん、何となくそんな気はしていた。運用してみてあまりにも酷ければ、ファンをつけることも考えよう。必要な設定項目を設定。GUIは停止して、SSHは常時起動に変更。lightdm最後にバージョンを確認。Kernelのデバッグ方法をまとめてみました。この説明は以下の内容を元にして、具体的な手順を説明したものです。使い方と、カーネルデバッガーの内部https://sites.google.com/site/kandamotohiro/linux/kgdbカーネルの設定の確認まずはカーネルの設定を確認。以下の通りに設定をします。set2CONFIG_FRAME_POINTER=y3CONFIG_KGDB=y4CONFIG_KGDB_SERIAL_CONSOLE=y5CONFIG_DEBUG_INFO=y6CONFIG_MAGIC_SYSRQ=yビルドして起動できることを確認します。ホストとターゲットの構成ホストとターゲットは2本のUARTで接続します。1本はカーネルログの出力確認、breakコマンドの入力、シェルの操作を行うために使用します(以降の説明ではUART0)。1本はkgdbの通信用に使用します(以降の説明ではUART1)。UARTが1本しかないケースは、SSHで代替することもできます。この場合、任意のタイミングでbreakをかけられないことと、カーネルログの出力が確認できないため、あまりおすすめはしないです。kgdbocを追加します。kgdbwaitは、カーネル起動時にkgdbの接続を待ちます。kgdbocはUART経由でgdbに接続することを指定します。kgdbocには使用するttyとボーレートを設定します。以下はUART1に対して、115.2kbpsのボーレートを設定しています。kgdboc=ttyS1,115200またカーネルログの出力先は以下のとおりUART0に対して設定します。カーネルを起動して、以下の表示が出るとkgdbの接続待ちの状態になります。gdb...ホストからターゲットに接続するホストからターゲットのカーネルに対して、gdbでアタッチします。ビルドしたvmlinuxをgdbで読み込みます。ターゲットがロードしたカーネルがzImageの場合でも、シンボル情報が必要になるためvmlinuxをロードします。vmlinux次にkgdbocでUART1に対してアタッチします。以下はホストの/dev/ttyUSB2とターゲットのUART1が接続されている例です。/dev/ttyUSB2接続に成功すると以下のようにbreakpointで停止します。*/kgdbの操作ほとんどの操作はgdbと同様に行うことができます。以下によく使う操作を記載します。ブレークポイントを設定&実行を再開する手順はgdbと同様です。以下はuio_readにブレークを設定する例です。