So the methodology has currently been trying to proceed as quickly as possible, trying to get every device working and aiming for breadth instead of stability. This allows me to do more high-value tasks like reverse engineering, rapidly gaining understanding of the platform instead of just getting bogged down debugging every single thing. Unfortunately, we're paying a bit for it now as I try to get things into gear to put together applications.
First thing is, I don't really trust the current memory structure. For one thing, it's WEIRD. It seems like even if I turn the MMU off, 0x0 is still mapped to 0x18000000. I know the MMU is working, somewhat, because if I allow the heap to run into the place I put my pagetable, bad things happen. =P I understand there's not going to be enough devices or memory to fill out the entire 32-bit address space, though, so maybe there was already some sort of static mapping. I also believe 0x9000000 (the range used by iboot's file transfer facility) is mapped to 0x18100000. That is, 0x0 == 0x80000000 == 0x18000000. The problem is that there are no such mappings in the page table. 0x80000000 to 0x180000000 is set cacheable and bufferable, but is identity mapped. Anyone have enough experience with the hardware to tell me if this makes sense? I mean, maybe it's just that the top 4 bits are just completely ignored by the memory controller.
Second thing is, sometimes I get random freeze-ups and I don't know why. Maybe I'm just hallucinating or screwing up somewhere, or maybe it's just me failing at C (wouldn't be the first time this happened). Anyway, the upshot is, I want to go back through and clean up/refactor the code into its final form. I tried to follow best programming practices as much as possible the first time around, but sometimes it just was too inefficient to do so when dealing with only half-way reverse engineered device drivers.
The third thing is what I'm working on currently. I need openiboot to replace iBoot. I currently have written a pretty simple chainloader. All it does is warm up all the devices as usual, and then load iBoot from NOR and then jumps to it. iBoot is relocateable and should be able to get itself to the right place. Now this works fine from a copy of openiboot that is started from iBoot using "go", but after I flash openiboot onto the "ibot" image in NOR, the device goes straight to DFU. Now either I'm screwing up hardware initialization or there is some additional verification (checksums, probably not signatures) done before LLB wants to load iboot. It may be that the latter is more likely, since I end up in DFU mode rather than a hung device. Not sure if the device is intelligent enough to recognize a failed boot if I don't say, update the powernvram.
After I get this working, the next thing is to see if the gamma table stuff works then (and if not, fix it). After that, the boot menu I talked about can be written. The next thing I want to work on is NAND FTL. That's the last piece before we reach the end of the "openiboot" phase and can move into the Linux phase. Pretty much all the drivers people expect will be ready and the fun can begin.
I know it seems like we're still very far, but I think we've made very concrete and tremendous progress in a fairly reasonable period of time. A lot of things are now clear and the biggest obstacles are not Apple's protections, or a lack of understanding, but merely my own stupid mistakes and typos.
Speaking of horribly stupid mistakes, my next post will be the story of how I almost bricked my phone yesterday night (but not really :P).
Job Coke
Jobs In Karachi
Jobs In Lahore
Jobs In Pakistan
Jobs In Peshawer
Pakistani News Paper
Jobs In Dubai
Best Soccer Highlights
Best Soccer Highlights
House Full Jobs
Pierson Jobs
Thunder Jobs
Full Soccer Highlights
Football Fox
Live Cricket and Highlights
Job Coke
Kazmetix
Soccer Delight
Cricket Mesh
Soccer Gang
Catagories
Tags
IPhone
Microsoft
iPod
Google
Intel
Latest News
WiFi
Mobile
Computer
Internet
Processor
Twitter
Web
Windows
Laptop
Wireless
Mobile Internet Devices
Intel Pentium
Architecture
Dual Core
Intel Atom
Technology
Chipset
Intel Centrino
Smart Phone
Quad Core
Intel Celeron
Phones
WiMax
Single Core
Microarchitecture
Digital Products Reviews
Motherboard
AMD Processors
LCD
Video
Oracle Support
Picasa Web
Web Browsers
LG
My Blog List
Followers
Posted by
Israr ahmed
Sunday, June 6, 2010
Labels:
Adsense,
Apple,
Blogger News,
Computer Hardware,
DSL,
Footballkawa,
Google,
Intel,
Internet,
IPhone,
iPod,
iTune,
Microsoft,
Mobile,
Network Engineer,
USA iPhone,
Web,
Wireless
Subscribe to:
Post Comments (Atom)