Код: Выделить всё
//port[0x90c00000 + 0x54] = (port[0x90c00000 + 0x54] & 0xfffc3fff) | 0x28000
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <asm/io.h>
#include <linux/ioport.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("root");
MODULE_DESCRIPTION("Video sensor initialization");
MODULE_VERSION("0.01");
unsigned long virtual_base = 0;
// address
unsigned long base = 0x90c00000 + 0x54;
// value
u32 value = (0x0 & 0xfffc3fff) | 0x28000;
static int __init sensor_init_start(void) {
void *address=0;
virtual_base = (unsigned long) ioremap(base, 4);
address=(void *)virtual_base;
iowrite32(value,address);
wmb();
return 0;
}
static void __exit sensor_init_end(void) {
}
module_init(sensor_init_start);
module_exit(sensor_init_end);
архитектура: armv5te
Перед insmod модуля в ядро - spi флэшка читается нормально (cat /dev/mtdblock1)
После - cat /dev/mtdblock1 зависает, в dmesg - timeout
Может, этот код как-то портит память?