我需要使用TMS320DM368读取异步外部存储器接口 ( AEMIF )在自定义硬件上的嵌入式 linux 环境中。我实际上还没有硬件,所以我正在 Leopardboard 368 上测试 vala 代码(如下)。引导加载程序使用第一个 AEMIF 来读取 nand flash。我的代码正在尝试使用第二个 AEMIF 来读取不在 Leopardboard 上但将在自定义硬件上的 SRAM。我怀疑分段错误是由于我试图访问受保护的内存这一事实引起的。实际的自定义硬件将有几 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);