[uClinux-dev] ARM7TDMI zImage booting
Plüss Tobias TA.E.1001
tobias.pluess at stud.hslu.ch
Sat Jul 27 09:01:36 EDT 2013
I am trying to run uClinux on an ARM7 LPC2000 chip from NXP. I have some external SDRAM (64M) and Flash (8M). In the Flash, I plan to store the zImage, and in the microcontroller's internal Flash I have some sort of bootloader, which sets up the device tree and then boots the zImage.
I downloaded the most recent kernel, which was 3.10.2 at that time. Then, I did the necessary changes, e.g. for the interrupt controller and so on, and added a new folder under arch/arm for my chip. In the menuconfig, I selected the option "Support ARM7TDMI processor", and I disabled the option " MMU-based Paged Memory Management Support". So the kernel shouldn't use any MMU features, and it should be compiled for an ARM7TDMI architecture, which uses the ARMv4 instruction set.
For the boot process, I copy the zImage to the external SDRAM and then jump to the entry point. My hardware is connected to a PC through the serial port, and in the terminal programm I can see the message "Uncompressing Linux..." but after a few seconds, the kernel trips an illegal instruction error. Why? I just looked in the arch/arm/boot/compressed/head.S, and there is this statement
which is definitely wrong and makes the kernel not portable to other architectures. Also, the head.S uses some CLZ instructions, which are ARMv5. I'm pretty sure this instruction is the reason which causes my processor to go into illegal instruction handler. Do you have some ideas how to solve the problem?
Many thanks in advance.
More information about the uClinux-dev