[Fascinate Android Development] SirGatez:
About a month ago some of you may remember my posts that I was working on a kernel. Here is my first public release. The whole thing works at about 95% or so.

==============

The advantages I notice while using it besides the normal issues associated with Eclair are as follows:

1.

Memory management has changed (has good and bad effects) Good: when you fly through 45 websites the browser does not crash as it eats memory. Bad: when you blow through 45 websites the browser will hang (easy fix hit home, and use app killer to free memory from apps you are not using) (Personally I like not losing my place as I get lost in the web, it also will prevent apps from dieing in the background when you are using multiple apps at the same time, if memory gets low enough the OS WILL KILL the offending apps). I personally found Eclair for Fascinate to handle memory available worse than this kernel, and I find this kernel handles memory more like Eclair on the Moto Droid did, and the Moto Droid had far less memory to work with.

2.

UI has a faster response vs stock kernels, the kernel is also running AS scheduling vs BFQ but I updated BFQ to run as well if you want to revert.

3.

Internet Connectivity appears to be faster with those apps that properly use the API. Web browsing, CheezeBurger, youtube etc all load content faster (efficiently? / Maybe related to memory management?)

Want something added to this list? Post your requests, just please be reasonable :-) If I like the idea I will try to implement it. Remember this is for kernel features not system ROM modifications.

==============

Issues to fix (ToDo List, I am working to fix these issues / Updated 01/30/11):

1.

Investigate and address bluetooth connection issues [ Confirmed that this issue does not affect everyone / or all bluetooth devices ]

2.

Investigate and address remaining data connection issues (Orbot activates and test show as using tor on normal websites, tor addresses fail to connect to servers, also Orbot is unable to de-activate

[Confirmed]

3.

Investigate and address remaining camera crash issues [ Please zip and send in logs from /proc/kmsg, specify if you used the volume control zoom or pinch to zoom ]

4.

Improve on touchscreen timing for quick flicks on the first attempt without burning up processor time.

5.

Investigate and fix stutter/crash on camera zoom followed by attempt to take photo.

Notice something that should be in this list? Please make a post describing your issue, remember to include the kernel version/rom and the steps you performed to reproduce the issue.

==============

For those doubting, this IS 2.6.29.6, I personally merged the code myself, IT IS NOT 100% COMPLETE. Some drivers still need merging, and the V4L2 code is not completely converted because Fascinate uses different (updated?) V4L code (compare Fascinate's Eclair to Eclair on AOSP)

If anyone wants to help bug hunt I will forever be grateful. I would like to finish squashing bugs in this in the next 2 weeks as I really want to attempt to work on a Froyo for Fascinate. Even if it uses Eclair code to run the only RIL code we have.

I also semi-blindly fixed about 50-100 coding problems in the Eclair Kernel, varied from not returning data from a function that should have, simple void definitions that were returning when they had no data to return and no function collected it. Correcting order of operations in if statements. Declaring data types that were vague (unsigned vs signed). You will notice it compiles a lot cleaner...attempting to fix the camera code nearly kills the camera completely, I am thinking the broken code dumps variables by accident that the corrected code does not.

Edit:

I wanted to share a few things every dev (some of it specific to kernels) should remember when nights are long and sleep is a half world away.

1) Keep a backup of your most recent WORKING work safe, because it is too easy to....uh oh *!@$

2) If you edit the config file, remember to make clean and make mrproper before you make, otherwise your still on your original config file (a copy of the one you actually edit .config)

3) Do not put comments to the right of options in the kernel config file...apparently they will be discarded (the entire option line, not the comment, you'll see it in your compile error message logs).

4) Automate the mundane, I have a nice build environment setup, I type one line and it will make a brand new kernel from scratch (I'll be sharing that later, keep an eye on this post)

5) Work with what you have, don't wait for someone else too. Somewhere, someone is working on something better, and tomorrow it will be out.

6) Laugh...at something...anything because lets face it, you make better decisions in a good mood, in a bad mood...entire trees (code) die, either from rm -Rf /work/crap//* or a sledgehammer to the motherboard. Which brings us back to the first thing to remember, where did you put that backup...different drive I hope?

Attached is a working kernel, it will have issues using DI01 (such as no vibrations), it works great with DJ05 ROMS and maybe DL09 system roms. At this time I can not recommend a DL09 system rom with this kernel, during my initial tests it appears to drop GPS and cell data connectivity frequently resulting in having to relock on GPS satillites, and losing data connections in networked applications.

I highly recommend the setup I am running,

DL09 Radio

,

Son Of Skywalker Blackhole v2.4

and this kernel (if you can handle the few bugs that is, it is beta).

Please feel free to post bug reports please include detailed information about the issues, I AM NOT FIXING APP PROBLEMS. Please remember to only report kernel issues and information specific to the kernel crash. If an app crashes on other kernels and not just this one please do not submit a report. This kernel is NOT setup for debug info, I will post one setup with debug turned on later. Right now, play around with it and report your results! Enjoy and have a great time :-D

GITHUB:

https://github.com/sirgatez/

Edit 1:

I thought I would mention that I originally started with the JT1134 kernel source from late Nov. - mid Dec. and the Samsung Fascinate stock source (from Samsung's Opensource website) then I merged in source from 2.6.29.6 from www.kernel.org and from Cyanogen's 2.6.29.6 Eclair kernel. I stopped on 2.6.29.6 instead of moving higher because of 1 reason, once you step in to 2.6.30 there are major driver changes requiring a lot of double verification and back trekking....In a few words, it is lots and lots of work, and I think that jumping from 2.6.29 to 2.6.29.6 will help transition to the 2.6.30 (Froyo?) series of kernels because then the majority of the work is in restructuring the driver code (which would likely best be done backwards, from the system .h files, to the .c handlers, down to the device drivers) from Samsung to match that in the stock 2.6.30 set. Complexity will be reduced by a measurable amount :-)

Notes 1:

Samsung's Android code has some significant differences under the hood from AOSP Android code, I have not sorted it all out yet, but it is possible that without an AOSP stock system that a full kernel update to the current AOSP code may not be possible. There is a built in virtual CD driver for what appears to be hosting the ISO built into the base Samsung system image, I have not opened the image yet but it appears to perhaps be drivers? Also it does not sleep the SD card like standard AOSP does, attempts to do so will disable the SD card from use with no ability to remount without a battery pull. (This is in 3 of 4 lines of code that AOSP had that must be commented out from the Samsung kernel for this SD issue to be prevented). For those wanting it, CIFS and NFS are compiled modules in this kernel. The current kernel is not over-clocked, and does not have voodoo. It does support both with a kernel configuration edit required for voodoo with the proper init scripts, and over-clocking requires changing just a few files and recompiling, I did neither as I wanted a true comparison to compare changes against the original stock kernel. The kernel does have the BLN notification code built in. BLN, Voodoo, and Over-clocking code are not my own creation they are pulled from their respective creators.

REMOVED ALL OLDER KERNEL INFORMATION

Update RC3 v2.2.4-VooDoo/NoVooDoo:

This is a minor/major (depending who you ask) bug fix to adjust the processor throttles. Think I've got it too set to a good sweet spot now, the peaks are steep and a little harder to climb but the falls are also quicker. After turning it my phone on with it last night and about 2 hours of use I went to sleep, wake up a couple times to silence various alarms (I wake to wake up, but I want to sleep a little more, can't I do both?), and these are the numbers that setcpu reports for time in state:

1.2Ghz = 0 (Had the phone thottled to 1.0Ghz for this test, but with 1.2 on it only uses it when it needs it, might could leave it on?

1.0Ghz = 164978 (Not such a big a number as before)

0.8Ghz = 292008 (much more reasonable than before, could be a little lower)

0.6Ghz = 117672

0.4Ghz = 114250

0.2Ghz = 104715

0.1Ghz = 2965562 (This is what I was aiming for proportionally for 0.1Ghz)

Remember these times are mostly from idling, the idea was to reduce clockspeed when not in use to save some juice. The phone might take a moment to wake up from idle, but once it is going you shouldn't feel hardly any difference between this and RC2. Bootup clockspeeds from your first 3-4 minutes will almost always remain in the top tier due to applications still loading, media scanner running, etc.

Update v2.2.4-VooDoo/NoVooDoo:

This is a major fix kicking us out of RC status and into actual release. Now for the menu, prepare your appetite, for the appetizer we'll be serving a much demanded voodoo color fix, and voodoo sound fixes. Followed by a main coarse of throttle tweaks, throttle shift updates (these are new they decide what the next cpu speed will be when a throttle is exceeded up or down, every kernel to my knowledge including my last used the default for a 5 slot kernel, here is a true 8 slot), and for desert a reduction in logged touch screen data from the touch screen, and an additional surprise to everyone, a reduced cpu load when using the touch screen!

Apparently the touch screen had authority to force the cpu into any slot it wants, it defaulted to slot 1 (which was 1.0Ghz for Blazed, now it's 1.2Ghz). The result of which meant that if you pressed the touch screen your cpu load catapulted up to 1Ghz for as long as you touched it even if you only held your finger in one place with no apps open. I have changed that to only go to 400Mhz, we'll see how this goes, if anything we might bump it to 600Mhz, so far besides a slightly slower response when first touch my touchscreen after leaving it alone for a long period it doesn't effect normal use from one app to another. If your processor is already at 400Mhz or higher it will not up it further. You will find this kernel will likely end up being the most battery conscious you have ever seen, once you get things moving the speed follows. If you find this kernel has a slower response than you feel it needs let me know, because when I fixed the touch screen from blasting the cpu load through the roof, it through off my throttle settings some, now they may be too conservative, report back and we'll fix them if it is a problem. Ah yes, please don't forget to tip your waiter if you enjoyed the service... [ REMOVED - Aggressive throttles not configured for use without aggressive touchscreen driver ]

Update v2.2.4R2-VooDoo/NoVooDoo:

This is a minor fix to correct the choppy feeling that v2.2.4 had, the choppiness was due to aggressive throttles to fight off the excessive high speeds the touch screen forced on. This should correct those issues. Unless I have another bugfix for 2.2.4, I will be adding 1.1Ghz in the next release making it a total of 9 slots. The higher speeds still need some tweaking, if your looking to hit benchmarks please set min and max to the speed you are testing, otherwise the throttle is trying to save you power that doesn't need to be used. But for everyday use, these settings should be good :-)

Update v2.2.5-VooDoo/NoVooDoo:

Voodoo sound is still broken, anyone have the patched files I could compare to? The screen should be about 15% dimmer than it usually is on the lowest setting (and scaled up from there to 100% at max), I found the dimmest setting just too bright in the dark for my self, and hopefully it will help me save a little extra juice because I usually use my phone on the lowest brightness setting anyway. Major fix to throttles, now they are better tailored to this many slots. Slots updated to 9, 100Mhz, 200Mhz, 400Mhz, 600Mhz, 800Mhz, 1.0Ghz, 1.1Ghz, 1.2Ghz, and 1.3Ghz. Increased processor voltages (my ultra low voltage was about 25uv lower in most slots than everyone else who has a uv kernel...I was a little too aggressive on that one). Update bluetooth driver, it should remain connected now, could someone please verify this? Stability has improved alot with the higher voltages and better handling of throttling for different situations. Several other pieces of hardware discover that have authority to play with processor. I capped highest touch screen processor forced at 600Mhz (the higher I set it the faster your battery goes, default stock is 1Ghz), and all other hardware at 1Ghz (not very many requests, but this is where rouge 1.2 use came from). If you had issues before except for camera zoom or data connectivity in apps give Blazed another try. The slightly higher voltages should improve a lot of the random issues people were having. You may see an improvement in cellular signal now, 1.3Ghz is also stable, but I wouldn't run it all day either due to heat generated etc...Well I hope everyone enjoys, this should be the best release of Blazed Yet!

Update v2.2.6-VooDoo/NoVooDoo:

This is a major fix for cellular signal issues many people have been having, the issue again was related to timing and the kernel modules not waiting long enough for the modem to respond before proceeding with action resulting in errors that caused a disconnect or forced a modem reset (requiring a phone reset to regain signal). I found waiting too long only slowed the entire phone down, so I opted to go with nanosecond wait times, waits that short however are active and will warm the phone up some, please report back if it becomes an issue as I am looking for a better wait device than udelay, preferable more like sleep that doesn't keep the processor busy. There is some performance stutter in the phone on the high end of internet connectivity speeds, but your not going to be losing your connection either, I'll continue to attempt to improve on this issue later on. [ REMOVED - Timing further improved in v2.2.7 ]

Update v2.2.7-VooDoo/NoVooDoo:

This is a minor for that makes a major difference. Improved timing for communication with GPIO/modem this should be the end of the majority of network connection issues. It was entirely a mailman problem, put package in box, check for package, package still there? no=do other stuff/yes=...wait,repeat at package still there?, etc. The fix is put package in mailbox, wait long, check is package still there? no=do other stuff,yes=short wait and check again...Hope this helps alot of you out, I am aware the touch screen is a little slow to respond and I will be looking into that issue. This little fix should also improve usable speed over v2.2.6 because the waits are better timed.

Update v2.2.8-VooDoo/NoVooDoo:

Timing is everything with electronics and this post...as promised today before 11:59pm is v2.2.8. Working Voodoo Sound v4, updates to the dpram/dpio communications again improving connection stability, if you lose your connections please report back (permanent loss requiring a restart only, fluctuations are different issue). Throttles set a little more aggressive about 5% so (helps ease on light loads), stepped up the first throttle jump from 100mhz to 400mhz (touch screen snaps back now). Dropped the 1Ghz permission for misc hardware to 400mhz if you have issues let me know, touch screen retains it's 600mhz permissions. Also screen brightness is reducible to gamma 1 brightness 10, typically reserved for battery about to fail status (I found the lowest setting just too dang bright). Enjoy everyone! I've been hammering away on this since 7am this morning and only had voodoo sound working about 9am. Thanks to JT1134 for his prebuilt kernel containing voodoo sound v2 working, adding v3 & v4 was a snap after that. Please report if you have any issues with it and remember you MUST be using the new voodoo sound app from the market.

Update v2.2.8R2-VooDoo/NoVooDoo:

Another dpram timing adjustment (will lower your upload speed a little but will be more stable in operation, down speeds should be around 200KB down 44KB up on a good connection). Adjusted 1.1Ghz dividers per nemesis (not sure that it looks right, appears to get better benchmarks than 1.2 now will follow up on it). Made throttles a little more aggressive, 2.2.8 looked all over the place and having difficulty controlling processor use.

Update v2.3.0-VooDoo/NoVooDoo:

Alot of work went into fixing dpram.c and multipdp.c it seems they were incompatible from the very beginning resulting in alot of ril issues and stability problems not just on my kernel but others as well, especially with nonstandard clocks and multiple slot kernel. I also added a fix to the framebuffer courtesy of JT1134 that has long since been overdue but a rare bug most probably have never seen. I fixed all the timing in dpram.c I also fixed the non-matching buffer sizes for multipdp and dpram (they talked to each other using different sized buffers...come on?!) There are still some bluetooth compatibility problems and the camera may still crash on zoomed photo, but I'd say it's 100% out of Beta! Enjoy! :-D I will be working on a Froyo kernel so stay tuned folks!

Update v2.3.0R2-VooDoo/NoVooDoo:

Minor fix to help prevent dpram crash by handling and disposing of invalid commands sent to dpram, should fix seeming random lockup. [ Edit: corrected incorrect version numbers in original v2.3.0 series xda posts, thanks to s44 who caught the error, this does not affect kernel downloads, this were named correctly ]

Update v2.3.1-VooDoo/NoVooDoo:

I reduced the delays in the ce147 camera driver, repairing the dpram driver resolve many of the seemingly random issues that had once plagued Blazed. Also a special treat for all you Blazed users, a new voodoo sound option that I have named "HEADPHONE_STICK" essentially the option when enabled (per boot) will force all audio directed to the external speaker to be instead directed to the headphone jack if the headphone jack has a plug in it. I find it excellent for not disturbing others around me with notifications when I would rather the phone be silent but I have headphones plugged in. Also excellent for using that awesome amp you have in combination withr you fascinate to wake you up in the morning. I will be contacting the maker of the Voodoo sound app in the market to get this option added to his application for quick and easy access. Also a major rework in the way kernel modules are loaded, all modules non-essential to booting are now stored in /system/kmodules. So if you reflash your system folder reflash your kernel or it may not boot, a quick browse will reveal what modules are kept there, I have more readily compiled and will release a separate "modules only" update.zip for those interested. By moving the modules it will allow for more options that are only available for including in the kernel boot image.

Update v2.3.1R2-VooDoo/NoVooDoo:

Reverted some of the CE147 delay changes, reducing all of them caused some minor camera instabilities. EXT3/EXT4 moved back into the kernel, for some reason even with it's depends loaded ext4 doesn't load correctly as a module (resulted in broken boot on voodoo, now fixed). Also You MUST USE RED CLOCKWORKMOD TO FLASH IF USING VOODOO, you may use green clockwork only if Voodoo is NOT enabled due to the fact that some modules required for bootup are now stored on the system partition and if your using Voodoo only red clockworkmod has access to it. Also if you flash a different system or restore a backup you must reflash the kernel to ensure your modules are up to date. Also is a new file KMODULES-FULL contains all of the modules I have been compiling for Blazed thus far, several nifty ones but I have not setup any of the configs to use them, anyone versed in Linux command line can utilize them or setup scripts to use them, have a look inside the zip too see what there is to play with, request and I will add more if the module could prove useful to others. Several of the modules in FULL are also in the Kernel due to being required for startup redundancy (such as the 3D video/LCD drivers etc, which without a Android system folder, Android won't boot, nor will it boot without these modules so system seemed like a reasonable place to store them. The kernel/initramfs file is less than 6MB with Voodoo due to moving these modules to the system folder. I plan to add ClockworkMOD as soon as I have time to test it, then Blazed will also work for Recovery.

The Great Voodoo Debate:

I have also been benchmarking Blazed against stock, to determine the difference Voodoo has on the kernel, so far it would appear Blazed has modifications either in the file system handling or the manipulation layers that are nearly equal to negating the speed lost to RFS's use before Voodoo or EXT4 is even brought into the equation. Just compare Stock vs Blazed (novoodoo) using 'RL Benchmarks SQLite Performance" from the market. A difference of 33.246 seconds in favor of Blazed, my preliminary results are (124.944 Seconds Blazed-NoVoodoo) (158.19 Seconds Stock) using the same exact system install less than 20 minutes apart between boots, with over 300 applications installed and several running like any other day. Based on this alone I find Quadrant is at least partially flawed at measuring proper I/O transfer timing, and I would NOT rely on it for an accurate benchmark in regards to I/O at this time until the issue is resolved by the Quadrant team. Voodoo does not produce the outlandish high scores that Quadrant makes out that it does, and Blazed is plenty fast in I/O even with RFS in use as shown by these preliminary results that any one of you can verify on your own using the "RL Benchmarks SQLite Performance" application, Voodoo does improve transfer compared to RFS in my tests but I am still putting together the results on Blazed NoVoodoo vs Blazed Voodoo. But as far as a 1800+ or 2000 score, so far my results say it just doesn't look realistic...sorry guys. On the flip side, if there is an error in my kernel causing a misread on the score you guys are welcome to help me find it and I will push the correction, but right now it looks like the issue is in how Quadrant measures I/O time, and I think non-atomic disk writes are the reason for the high scores, theoretically they would return claiming data is written to disk almost immediately when in reality it is still in memory and the kernel will write it to the disk at later time without the write time being considered as part of the benchmark (Google: write-caching, also known for providing significant performance improvements over atomic-writes).

If you appreciate Blazed and enjoy using it, please consider making a donation. Thank you for trying it out and have fun!