现在控制台可以工作了,我们可以看到真正的问题。系统仍然无法启动。由于我们正在使用 C 代码,我们跟踪了代码,发现一个名为sdram_size()没有正确完成。该函数探测一个寄存器以获取 RAM 的大小,而我们的板子没有这个寄存器。我们让该函数返回一个给定的值 128MB,这是一个糟糕的hack,但我们的板子没有办法知道 RAM 的大小。
我们在一些名为 todc_XXXX 的函数中遇到了同样的问题,主要是todc_get_rtc_time(), todc_set_rtc_time(),以及time_init()由于我们的板子上没有 RTC(实时时钟)芯片,而这些函数正在使用它。目前,我们让todc_XXX函数仅设置和获取一个固定的日期和时间,因为我们的板子没有 bios 电池,因此在断电时无法保持时间。
完成所有这些之后,我们找到了todc_calibrate_descr(),它再次使用了 RTC 芯片。我们不得不将该函数替换为我们自己的
void calibrate_decr() { int freq, divisor; freq = bus_freq(); divisor = 4; tb_ticks_per_jiffy = freq / HZ / divisor; tb_to_us = mulhwu_scale_factor(freq / divisor, 1000000); } |