Я собрал ядро 2.6.35 в моей системе с некоторыми конкретными требованиями. Я также собрал некоторый определенный приложением модуль с тем же ядром. Я загрузил встроенную версию и обнаружил, что она не работает должным образом, так как в некоторых графических интерфейсах и других модулях отсутствует проблема. Но система загрузилась, и я сделал insmod app.ko. Я столкнулся с аварией. Я обнаружил, что это проблема стека. Вызывающая функция в приложении передает адрес двух локальных переменных. как int a, b; добавить (& a, & b); Я проверил значения & a и & b перед передачей, и он остался ненулевым, но когда я получаю то же самое в вызывающей функции, оба & a, & b равны NULL или некоторому мусорному значению. Я увеличил размер стека, но ничего не произошло. Когда я пропустил вызов функции, я увидел, что много выделений памяти также не удалось. Поэтому я думаю, что это должно быть проблема с памятью. Есть ли что-то, что я должен проверить для опции gcc, чтобы определить стек или проверить переполнение стека. Любые намеки на это могут мне очень помочь. Заранее спасибо. Я только что сделал несколько абстрактных примеров, так как оригинальный раздел кода требует много времени для объяснения.
main()
{
struct DMAINFO* pDmaInfo;
struct DESC* pDesc;
/* printk("The function aruguments are Desc = %p and DmaInfo %p", &pDesc, &pDmaInfo); */
Create_DMA(&pDesc, &pDmaInfo);
}
void Create_DMA(**ppDesc, **ppDmaInfor)
{
printk("The function aruguments are Desc = %p and DmaInfo %p", ppDesc, ppDmaInfo);
}
Оператор printk внутри create_DMA дает мне значения NULL, но тот же оператор print в основной функции до вызова create_DMA имеет некоторые значения.