Мне нужно прочитать интерфейс асинхронной внешней памяти (AEMIF), используя a TMS320DM368 во встроенной среде Linux на пользовательском оборудовании. На самом деле у меня еще нет аппаратного обеспечения, поэтому я тестирую код vala (ниже) на Leopardboard 368. 1-й AEMIF используется загрузчиком для чтения nand flash. Мой код пытается использовать 2-й AEMIF для чтения SRAM, которой нет на Leopardboard, но будет на пользовательском аппаратном обеспечении. Я подозреваю, что ошибка сегментации вызвана тем, что я пытаюсь получить доступ к защищенной памяти. Фактический пользовательский 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);
mmap()
файл вместо SRAM. Обратите внимание, чтоmmap()
может быть предоставлен виртуальный адрес для использования или будет возвращать виртуальный адрес. Кстати, если у вас есть кастомное аппаратное обеспечение, вам придется возиться с ядром. Также см. stackoverflow.com/questions/11500291 / - person sawdust   schedule 12.09.2012unowned uint8[] source = (uint8[]) 0x04000000;
, тогда вы могли бы просто использовать нарезку массива для получения нужных данных (например,var dest = source[0:256];
). Вам действительно почти никогда не нужно использовать необработанные указатели в Vala, хотя некоторые привязки (особенно libxml2 и posix) будут искушать вас сделать это. - person nemequ   schedule 12.09.2012devmen2.c
, скорее всего, не поставят под угрозу безопасность. Но если ваш продукт также имеет электронные интерфейсы, такие как последовательная консоль и/или сетевой интерфейс, то следует приложить все усилия для поддержки концепций безопасности Linux, как упоминает @jszakmeister. - person sawdust   schedule 12.09.2012