私はカーネル開発において新しいです。 GeodeベースのPC/104ボード上で動作するLubuntu 12.04(uname -r == 3.2.0-107-generic)があります。 CPUはPAEをサポートしていないので、12.04は私がいる場所です。 2つのSC2681 DUARTがあるI/Oボードがあります。彼らはポート0x100と0x110に敬意を表し、両方ともIRQ 15を使用します。2つのSC2681 DUARTのためのカーネルドライバを設定してください
私はsccnxp driver from a newer kernel (3.10)をコピーして、このカーネルで動作するように修正しました。
platform_device_register(&sc2681_0);
if ((ret = platform_driver_register(&sccnxp_uart_driver)))
{
platform_device_unregister(&sc2681_0);
return -EINVAL;
}
return 0;
をし、含まれてい__exit:ドライバは2つのUARTを処理するように設定されて
platform_driver_unregister(&sccnxp_uart_driver);
platform_device_unregister(&sc2681_0);
static struct resource sc2681_0_resources[] = {
DEFINE_RES_IO(0x100, 0x10),
DEFINE_RES_IRQ(15),
};
static struct sccnxp_pdata sc2681_0_info = {
.frequency = 3686400,
};
static struct platform_device sc2681_0 = {
.name = "sc2681",
.id = -1,
.resource = sc2681_0_resources,
.num_resources = ARRAY_SIZE(sc2681_0_resources),
.dev = {
.platform_data = &sc2681_0_info,
},
};
は私も含まれてい__initを追加しました:ここに私の初期化データであります。/dev/ttySC0と/ dev/ttySC1がロードされて作成されます。このロードをポート0x110の2番目のDUARTにするにはどうすればよいですか?
あなたはボードが何であるかの手がかりを与えませんでした(いくつかの技術仕様、URL)。デバイスツリー(ARM)またはACPI(x86)をサポートするために、デバイスツリー(ARM)を簡単に更新する方法があります。既存のカーネルソースの上に行ったコミットを見るのもいいでしょう(1. linux-stableからlinux-3.2.yをクローンしました)2.修正されていないドライバをプッシュしました。 。 – 0andriy
こんにちは@AndyShevchenko読書に感謝します。デュアールは私が共有できないカスタムボードに搭載されています。私はカーネルを構築したいと思っていますが、私はそれについての経験はまだありません。今はsccnxpをモジュールとしてビルドし、 'insmod'をロードしました。その部分は働いていますが、最初のデュアートのためだけです。私の質問は、ドライバが2つの異なるIOポートにデバイスの2つのコピーをロードするようにリソースとplatform_deviceを設定する方法に関するものです。 – leetibbett
**あなたが行った** GPLコードの変更を**共有する必要があります。しかし、エンジニアの言葉を話しましょう。 **すべて**を共有する必要はなく、UARTドライバに関連する部分だけを共有することができます。 – 0andriy