TMS320DM368を使用して Asynchronous External Memory Interface ( AEMIF ) を読み取る必要があります。カスタム HW 上の組み込み Linux 環境。実際にはまだハードウェアを持っていないので、Leopardboard 368 で vala コード (以下) をテストしています。最初の AEMIF は、ブートローダーが nand フラッシュを読み取るために使用されます。私のコードは、2 番目の AEMIF を使用して、Leopardboard にはなく、カスタム HW にある SRAM を読み取ろうとしています。セグメンテーション違反は、保護されたメモリにアクセスしようとしていることが原因であると思われます。実際のカスタム HW には、読み取る必要がある数 M の SRAM がありますが、このテスト コードを読み取って 256 バイトを読み取ろうとしています。以下のテスト コードによって引き起こされたセグメンテーション違反を修正するにはどうすればよいですか? カーネルにドライバーを追加する必要がありますか? 可能であれば、カーネルを台無しにしたくありません。特定のアドレス範囲を非保護として構成または宣言する組み込み Linux の方法はありますか?
uint8 * source = (uint8 *)0x04000000; // AEMIF Data (CE1)
uint32 * pA2CR = (uint32 *)0x01D10014; // AEMIF 2 Config Reg (CS3 space)
const uint32 READ_SETUP = 1; // Read setup: EMIF clock cycles - 1
*pA2CR = (READ_SETUP << 13);
const size_t size = 256;
var dest = new uint8[size];
memset(dest, 0, size);
memcpy(dest, source, size);