1
0

fix(lab02): fix address in ex05

This commit is contained in:
2026-03-31 14:11:35 +02:00
parent fb8de73be8
commit 786ed475ba

View File

@@ -15,6 +15,10 @@
#define TEXT_LENGTH_MAX 255 #define TEXT_LENGTH_MAX 255
#define CHIP_ID_BASE_ADDR 0x61c14000
#define TEMPERATURE_SENSOR_BASE_ADDR 0x61C25000
#define ETHERNET_CONTROLLER_BASE_ADDR 0x61C30000
static char* text = "dummy text"; static char* text = "dummy text";
module_param(text, charp, 0664); module_param(text, charp, 0664);
@@ -66,17 +70,25 @@ static int __init skeleton_init(void) {
uint32_t temperature = 0; uint32_t temperature = 0;
uint32_t mac_address[2] = {[0] = 0,}; uint32_t mac_address[2] = {[0] = 0,};
resources[0] = request_mem_region(0x01c14000, 0x1000, "nanopi - chip ID"); resources[0] = request_mem_region(CHIP_ID_BASE_ADDR, 0x1000, "nanopi - chip ID");
resources[1] = request_mem_region(0x01C25000, 0x1000, "nanopi - temperature sensor"); resources[1] = request_mem_region(TEMPERATURE_SENSOR_BASE_ADDR, 0x1000, "nanopi - temperature sensor");
resources[2] = request_mem_region(0x01C30000, 0x1000, "nanopi - Ethernet controller"); resources[2] = request_mem_region(ETHERNET_CONTROLLER_BASE_ADDR, 0x1000, "nanopi - Ethernet controller");
if ((resources[0] == 0) || (resources[1] == 0) || (resources[2] == 0)) { if (resources[0] == 0) {
pr_err("Failed to reserve memory region for chip ID, temperature sensor or Ethernet controller\n"); pr_err("Failed to reserve memory region for chip ID\n");
return -EFAULT;
}
if (resources[1] == 0) {
pr_err("Failed to reserve memory region for temperature sensor\n");
return -EFAULT;
}
if (resources[2] == 0) {
pr_err("Failed to reserve memory region for Ethernet controller\n");
return -EFAULT; return -EFAULT;
} }
registers[0] = ioremap(0x01c14000, 0x1000); registers[0] = ioremap(CHIP_ID_BASE_ADDR, 0x1000);
registers[1] = ioremap(0x01C25000, 0x1000); registers[1] = ioremap(TEMPERATURE_SENSOR_BASE_ADDR, 0x1000);
registers[2] = ioremap(0x01C30000, 0x1000); registers[2] = ioremap(ETHERNET_CONTROLLER_BASE_ADDR, 0x1000);
if (registers[0] == 0) { if (registers[0] == 0) {
pr_err("Failed to map processor registers for chip ID\n"); pr_err("Failed to map processor registers for chip ID\n");
return -EFAULT; return -EFAULT;
@@ -138,9 +150,9 @@ static void __exit skeleton_exit(void) {
} }
// Ex05 - Memory-mapped I/O // Ex05 - Memory-mapped I/O
if (resources[0] != 0) release_mem_region(0x01c14000, 0x1000); if (resources[0] != 0) release_mem_region(CHIP_ID_BASE_ADDR, 0x1000);
if (resources[1] != 0) release_mem_region(0x01C25000, 0x1000); if (resources[1] != 0) release_mem_region(TEMPERATURE_SENSOR_BASE_ADDR, 0x1000);
if (resources[2] != 0) release_mem_region(0x01C30000, 0x1000); if (resources[2] != 0) release_mem_region(ETHERNET_CONTROLLER_BASE_ADDR, 0x1000);
pr_info ("Linux module skeleton unloaded\n"); pr_info ("Linux module skeleton unloaded\n");
} }