[Other TouchPad Development] castrwilliam:
it's a branch in the path, but it's not a fork in the road.

Things haven't been committed in a while, so you might want to know what I'm working on.

the short story

Make nsboot ready for cross platform. Add nifty features as a side benefit of this:

I changed the included kernel to use the

"refactored" hardboot patch from MultiROM

, which moves copying of parameters/"atags" - the only necessary guest patch - into the host kernel. Eventually I'll figure out the load addresses and you'll be able to

boot unmodified uImages

. Once that works I'll make nsboot also scan the old /boot (used by moboot) and show them along with zImages. Complete plug and play, basically.

No more .tar files to make OSes bootable.

Screen size/density/orientation independency

, just like Android has but simpler. Also makes it extremely easy to have

run-time theming support.

No more repartitioning at install time.

I badly needed a way to better utilize the space, because I can no longer fit webOS, Android 2.[23] and 4.[0-4], Ubuntu, Fedora, Bodhi, Arch and Slackware, my music, and Android games on one 32GB touchpad using dedicated volumes... Things will move to be under

one huge ext4 volume

, one by one - both Linux and Android can apply (maybe even webOS, but it has like -99 gazillion different mounts and could be a challenge.) This would mean

more flexibility than normal Android

if I pull it off perfectly - space will be shared between system, data, and cache. I also heard of people successfully getting webOS to mount an ext4 user storage instead of a vfat one, so if that works it'll be a

universal /data/media-like solution

with none of the drawbacks.

I may be a bit worked up. Much of this is rather difficult, and has never been attempted, to my knowledge. If it does work, though, I'm not saying

"XDA front-page article and widespread adoption"

, but that's a realistic possibility. :highfive:

the long story

Need for #1:

In the kernel, find a page address that is never overwritten by bootie. It has little in common with the "aboot" that is modified and crippled to various degrees by Samsung, HTC and the like.

Add code to extract a bootie compatible uImage into its constituents. These are either a lone kernel uImage, or individual kernel and ramdisk uImages nested inside a multi uImage. I have a binary from moboot in nsboot/root that does just that, so I just need to add generic boot interfaces to it.

Add code to scan /boot (ext4 on mmcblk0p13) for uImages when generating the boot menu, and call the above code on each.

Need for #2:

Framebuffer size detection. Already done, technically - before mmap'ing /dev/fb0, it does the standard Linux fbdev ioctls to get just that - but currently, it ignores it.

Turn all the screen coordinates into normalized (0..1) floating point, or even normalized fixed point. Seperate said screen coordinates from the source code into something easier to modify (also makes theme support easier!)

Go back to one main font size instead of the [12346]x pre-scaled fonts it changed to at the time of the conversion from buttons to lists.

Want for #2:

If I don't want the fonts to look ugly/jagged again, and don't want proportional fonts (a given, they're huge, slow and clunky, especially when it doesn't use a single shared library!), add better lo-color resize algorithms. A good source of these is actually old console emulators, like NES and SNES. Most are already open source or public domain.

In addition to moving the placement and dimensions of the boxes and text out of the source, also move the colors of them and the main font.

Make it possible and reliable to re-load the theming info at runtime.

Add UI for theme selection - probably merge it with "set LCD brightness".

Make a global config file and save it somewhere persistent and always available (it will be small, so I'm thinking /boot.) Use it to store the selected theme and brightness across reboots.

Fix the time zone issues with said config file - user selects a timezone, nsboot stores it, loads it at boot, and the clock is right again. The RTC chip already keeps time between boots, obviously.

Need for #3:

Seperate LVM related code and add alternatives to it with "mkdir" calls.

Maintain a good upgrade path, unlike I did with the SmackMe transition.

Implement the biggest, most comprehensive initrd patcher I've ever wrote. Abstract stuff as needed to make it reasonably modular and extensible. All the compatibility will directly depend on it from this point on!

Make the first wave of patches to OS init code to get grounded. Desktop Linux should be easiest, followed by Android (recovery and normal boot), followed by webOS.

Want for #3:

I'm converting nsboot to shared libraries at first opportunity, and ideally before beginning on item #3. We'll see.

Obviously, full conversion to the single-FS method. Ideally, only one LVM volume will remain, though I don't think it's worth it to yank LVM entirely and reformat mmcblk0p14 as that one partition. This will probably involve a list 3x as long as all these, and I plan to edit this section to include things as I realize/discover them.