けど、なんかとても不安ですよね。こんな状態で配布されてるって、どんだけzynqでこれを使ってる人が少ないのだろうかと。
実績を重んじる立場からすると、多少IPフットプリントが大きくてもドライバに実績がある16550互換IPを使ったほうがいい、と思うケースもあると思います。
こちらはすんなり動く・・・かと思ったのですが、少し罠があったので紹介しておきます。
まずPL側は、IPを配置して線を繋ぎます。AXIバスの他に、TX/RXに相当するsout/sinと、割り込み線だけは繋いでください。他は全て無結線でも大丈夫です。
次にDTSは適当にぐぐってきたのを参考に書きます。割り込みはuartliteの時と同様に61-32=29、アドレスは43C00000にしました。
axi_uart0: serial@43C00000 {
current-speed = <115200>;
clock-frequency = <100000000>;
compatible = "ns16550a";
interrupt-parent = <&ps7_scugic_0>;
interrupts = < 0 29 4>;
reg = < 0x43C00000 0x10000 >;
reg-offset = <0x1000>;
reg-shift = <2>;
xlnx,family = "zynq";
xlnx,has-external-rclk = <0x0>;
xlnx,has-external-xin = <0x0>;
xlnx,is-a-16550 = <0x1>;
xlnx,s-axi-aclk-freq-hz = <0x5F5E100>;
xlnx,use-modem-ports = <0x0>;
xlnx,use-user-ports = <0x0>;
xlnx,instance = "axi_uart16550_0";
};
特にドライバに手を加える必要は無いですが、compatibleの参考とかで見たいときはファイル名8250.c を探してください。
あとはLinuxカーネルのビルド時に2箇所、有効にしなきゃいけないチェックがあります。
一つは当然
これで16550互換シリアルが/dev/ttyS0 とかで動作するはずです。
あとはLinuxカーネルのビルド時に2箇所、有効にしなきゃいけないチェックがあります。
一つは当然
8250/16550 and compatible serial supportさらに、DTSファイルにシリアルポートの初期化を記述する前提となる機能
Serial port on Open Firmware platform busも有効にしないとIPを認識してドライバが起動してくれません。
これで16550互換シリアルが/dev/ttyS0 とかで動作するはずです。
0 件のコメント:
コメントを投稿