Here is the current progress of the kernel porting:
- Basic architectural support (IRQ, timer, memory mapping)
- Serial port
- EHCI driver
- OHCI driver
- MTD driver
Here are some notes regarding the development:
- Serial port is 16550 compliant, but you need to remap the registers.
- STR9104 have PCI bus, but it is not connected anywhere. The old kernel have a driver for PCI bus, and it was used in the EHCI driver. I think this is kind of a hack, because the PCI stuff is not needed.
- The EHCI and OHCI is part of the SoC, not on the PCI bus. There is a quirk in the initialization of the OHCI part (you can look at it in the patch)
- MTD driver is based on CFI chipset (AMD/Fujitsu). I only tested reading and writing configuration partition (mtd2 and mtdblock2)
- Network Driver (STR9104 contains MAC hardware, and in Agestar it is connected to IP101A as the PHY hardware)
I have not uploaded a new patch for the MTD yet (I will do it tonight). For the RTC and Button part, I think it will not be so easy:
- The RTC in the old kernel uses I2C bus, and X1205 driver. The X1205 already have a driver in the kernel tree, but there is no driver for the I2C part in the source code from Linksys devices. In the STR9104 product page, it is mentioned that the SoC already have an RTC device inside it, so it is possible that this RTC might not require I2C at all. I need to do some experiments.
- The button driver source code is not given, but I think I can reverse engineer this.
Kineq from the mailing list have warned me about something that is not right in the user space. When he tried to build uClibc, he got "invalid instruction" when running some applications (he was still using the old kernel at that time). With the new kernel, I also got the same thing, some applications (such samba) failed to start (segmentation fault), some works, but will halt in the middle (for example curl will get invalid instruction). The original agestar NCB3AST firmware uses libc 2.3, and not uClibc, so may be one of these things are not correct:
- The uClibc (there were quite many bugs in uClibc)
- The compiler (may be I am giving the wrong flags)
- The processor (Faraday claims 100% arm compatibility, but may be it is not that compatible)
- The kernel (I doubt it, since it also happens in the old kernel)
Note: Problem was solved. FA526 doesn’t support Thumb, and I tried to compile things using EABI, which requires thumb interworking.