piątek, 17 października 2014

Nieoficjalny ROM na Xperia U

Przyzwyczajony jestem, że aby zainstalować nieoficjalny ROM na telefonie z Androidem (doświadczenia z X10 i HTC jakiśtam) muszę przesiadać się na Windowsa. Z Windowsem bywa różnie - zabawa ze sterownikami, antywirusami, firewallami, komunikatorami i jasnością ekranu - bezsensowna robota.

Jak się jednak okazuje sytuacja się od ostatniego czasu zmieniła, a aktualizacja sprowadza się do kilku banalnych kroków.

Na początek wybieramy ROM i kernel, np. te:
ROM: http://forum.xda-developers.com/xperia-u/u-development/rom-stock-jellybean-4-1-2-v6-t2284394
Kernel: http://forum.xda-developers.com/xperia-u/u-development/kernel-experimental-v12-t2326515 (wspomniany w poprzednim linku)

Rozpakowujemy paczkę kernel, aby wydostać z niego boot.img.

Odblokowujemy bootloader na stronie (wg. instrukcji): http://unlockbootloader.sonymobile.com/instructions

I już jesteśmy gotowi do wgrywania (zrzekam się odpowiedzialności za ew. szkody/utratę gwarancji).

Na początek wrzucamy paczkę z ROM'em (spakowaną tak jak została ściągnięta) na pamięć wewnętrzną telefonu. Skuteczny jest w tym przypadku program gmtp.

Następnie, udajemy się do katalogu z obrazem boot, wyłączamy telefon i podłączamy go trzymając przycisk zwiększania głośności.

Telefon powinien świecić na niebiesko (dioda pod przyciskami).

Teraz:
sudo fastboot flash boot boot.img
[sudo] password for quiteinsaneblablador:
sending 'boot' (7732 KB)...
(bootloader) USB download speed was 19407kB/s
OKAY [  0.423s]
writing 'boot'...
(bootloader) Flash of partition 'boot' requested
(bootloader) S1 partID 0x00000003, block 0x0000d000-0x00014fff
(bootloader) Erase operation complete, 0 bad blocks encountered
(bootloader) Flashing...
(bootloader) Flash operation complete
OKAY [  0.678s]
finished. total time: 1.101s

Jeśli wszystko poszło jak należy, odłączamy telefon od komputera i włączamy go trzymając przycisk Volume Up. Po chwili powinien pojawić się panel CWM, a w nim wybieramy po kolei wipe: cache, data, dalvik-cache. Następnie install zip i wybieramy odpowiedni ROM do instalacji. Gdy program zakończy wgrywanie ROMu wyłączamy i włączamy telefon.

That's all folks!

pozostałe źródła:
http://forum.android.com.pl/f670/instalacja-kerneli-przez-flashtool-fastboot-236690/
http://forum.xda-developers.com/showthread.php?t=1752270
http://forum.android.com.pl/f669/cwm-co-to-na-co-jak-zainstalowaae-229632/
http://www.androidlegend.com/ported-official-android-4-1-2-jelly-bean-firmware-for-xperia-u-st25i-6-2-a-1-100/#kernel

poniedziałek, 18 sierpnia 2014

HTML Validator w Firefoxie

Jakiś czas temu przez chwilę pracowałem na Windowsie. Wpadłem wtedy na pomysł, by przy pisaniu strony kontrolować 'poprawność' html'a i css'a. Szybki ogląd na sprawę sprowadził mnie do wtyczki HTML Validator. Niestety, po powrocie na Linuksa okazało się, że wersja w 'sklepie' FF jest niekompatybilna z moim systemem. Na szczęście starsze wersje, dostępne TU, są kompatybilne.

sobota, 16 sierpnia 2014

wicd + wvdial, czyli alternatywa dla NetworkManager

NetworkManager mnie po prostu drażni... Ostatnio wpisałem nawet w google "NetworkMenager sucks" i znalazłem dużo wyników.

Jak go zastąpić? Otóż bardzo wdzięczną i użyteczną alternatywą jest wicd. Jest to menadżer sieci WIFI oraz LAN. Niestety nie wspomniałem i nie mogę tutaj wspomnieć o sieciach GSM, gdyż ich obsługę przewidziano na daleką przyszłość (wicd 2.0).

Używam modemu Nokia CS-11, który nie jest specjalnie udanym modelem, ale działa. Korzystam również z sieci Play, bo tak.

Aby skonfigurować połączenie bez NM, można skorzystać z aplikacji gnome-ppp, która mi nie przyniosła wiele szczęścia. gnome-ppp jest niczym innym jak interfejsem dla wvdial, aplikacji służącej niczemu innemu jak właśnie wdzwanianiu się. Aby go używać, należy go skonfigurować:

sudo nano /etc/wvdial.conf:
[Dialer P4]
Modem = /dev/ttyACM0
;Baud = 921600
Baud = 460800
Init1 = ATH
Init2 = ATE1
Init3 = AT+CGDCONT=1,"IP","internet"
Dial Command = ATD
Phone = *99#
Stupid mode = yes
Username =;
Password =;
Auto DNS = yes
Gdzie:
internet - nazwa APN,
username i password - w ten sposób zostają zachowane jako puste,
Baud - prędkość komunikacji z modemem. Gdzieś kiedyś wyczytałem, że ustawienie zbyt wysokiej częstotliwości przepływu danych, przy współczesnych urządzeniach niczemu nie zaszkodzi, gdyż urządzenia się skomunikują.
Modem - pseudoplik przedstawiający nasze urządzenie. Częściej jest to /dev/ttyUSBx (x - 0 do 2), ale w moim przypadku wyszło tak.

Początkowo miałem problem polegający na tym, że modem się łączył wvdial nie miał o nic pretensji a ping nie szedł. Okazało się, że należy dopisać drogę, gdyż wvdial sam tego nie robi [źródło]:
sudo route add default gw 10.0.0.1
Gdzie 10.0.0.1 to IP jakie zwraca wvdial pod nazwą remote IP address (które wydaje się być stałe dla danego operatora).

czwartek, 24 lipca 2014

Zarządca procesora: conservative

Uwaga! Informacje w poniższym poście mogą być przydatne (w szczególności kwestia podrasowywania zarządcy, ale narzędziem do sterowania zarządcami/prędkościami lepszym jest cpufreqd.

Sugeruję conservative governor [źródło]. W skrócie, jest to tryb podobny do ondemand, z tym, że, gdy ondemand wykryje przekroczenie obciążenia procesora (o tym później), ustawia go na maksymalną częstotliwość. Conservative robi to spokojniej. Po przekroczeniu ustawia procesor na częstotliwość 'o krok wyżej'. Aby ustanowić conservative jako domyślne ustawienie trzeba zainteresować się plikiem /etc/init.d/ondemand. Skrypt ten po około minucie od uruchomienia systemu zmienia zarządcę na ondemand [źródło]. Aby go całkowicie wyłączyć wystarczy:
sudo update-rc.d -f ondemand remove
Przyda nam się on jeszcze do jednej rzeczy - aby utworzyć skrypt conservative. Ja sam skopiowałem skrypt ondemand do conservative:
sudo cp /etc/init.d/ondemand /etc/init.d/conservative
Oraz zamieniłem odpowiednie wpisy ondemand na conservative, w wyniku czego otrzymałem taki skrypt:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          ondemand
# Required-Start:    $remote_fs $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Set the CPU Frequency Scaling governor to "conservative"
### END INIT INFO

# Don't run if we're going to start an Android LXC container:
[ ! -f /etc/init/lxc-android-config.conf ] || exit 0

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

AVAILABLE="/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors"

case "$1" in
    start)
        start-stop-daemon --start --background --exec /etc/init.d/conservative -- background
        ;;
    background)
        sleep 60 # probably enough time for desktop login

        [ -f $AVAILABLE ] || exit 0
        read governors < $AVAILABLE
        case $governors in
                *interactive*)
                        GOVERNOR="interactive"
                        break
                        ;;
                *conservative*)
                        GOVERNOR="conservative"
                        break
                        ;;
                *)
                        exit 0
                        ;;
        esac

        for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
        do
                [ -f $CPUFREQ ] || continue
                echo -n $GOVERNOR > $CPUFREQ
        done
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac
Aby zmusić skrypt do działania zamiast ondemand, należy jeszcze wykonać poniższe komendy [źródło]:
sudo chmod +x /etc/init.d/conservative
sudo update-rc.d conservative start 99 2 3 4 5 .
Idąc dalej, można 'dopieścić' skrypt aby ustawiał wymarzone przez nas progi i parametry trybu conservative. W tym celu warto przyjrzeć się plikom znajdującym się w /sys/devices/system/cpu/cpufreq/conservative/ [źródło]:

down_threshold - obciążenie procesora poniżej którego zmniejszana jest częstotliwość (domyślnie: 20%)
freq_step - krok zwiększania/zmniejszania częstotliwości (domyślnie: 5%)
ignore_nice_load - wliczanie lub niewliczanie procesów 'nice', tj. "nie ważne jak długo robisz" do udziału w obciążeniu (domyślnie: 0)
sampling_down_factor - wpływa na wydajność podczas pełnego obciążenia. Zapobiega zmianom częstotliwości (góra/dół) przy pełnym obciążeniu (domyślnie: 1)
sampling_rate - co jaki czas system ma sprawdzać obciążenie procesora

W pliku przytoczonym jako źródło zaleca się:
echo $(($(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_transition_latency)*750/1000))
W moim wypadku komenda zwraca 3000 co jest mniej niż minimum (domyślnie: 80000).

sampling_rate_min:
echo $(($(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_transition_latency)*100))
Tutaj 400000 (domyślnie: 8000).

up_threshold - obciążenie po przekroczeniu którego częstotliwość jest zwiększana (domyślnie: 80%)

aby trochę podrasować powyższe parametry wystarczy zapisać do danych plików konkretne parametry (jako root):
        echo -n 30 > /sys/devices/system/cpu/cpufreq/conservative/down_threshold
        echo -n 1 > /sys/devices/system/cpu/cpufreq/conservative/ignore_nice_load
        echo -n 70 > /sys/devices/system/cpu/cpufreq/conservative/up_threshold
A to można wrzucić do pliku /etc/init.d/conservative, za pętlą CPUFREQ.

środa, 23 lipca 2014

AMD Turion (A4-4355M) undervolting i testowanie stabilnośći

Tradycyjnie, przypadkowo trafiłem na stronę. W sympatyczny sposób mr-fabio90 opisał jak zmusić moje APU do korzystania z prędkości 900MHz, która (domyślnie lub bezmyślnie? =/) jest wyłączona:

1. Pobieramy i instalujemy TaurionPowerControl
(początkowo skopiowałem po prostu binarkę i utworzyłem dowiązanie symboliczne o nazwie tpc, ale chyba instalator (make && install) też to robi).
Aby dalsze komendy działały musimy załadować odpowiednie moduły:
modprobe cpuid
modprobe msr

2. Sprawdzamy jak wygląda nasza konfiguracja poprzez sudo tpc -l.
U mnie teraz to wygląda tak:
TurionPowerControl 0.44-rc2 (export)
Turion Power States Optimization and Control - by blackshard

Main processor is Family 15h (Bulldozer/Interlagos/Valencia) Processor
        Family: 0xf             Model: 0x0              Stepping: 0x1
        Extended Family: 0x15   Extended Model: 0x10
        Package Type: 0x0       BrandId: 0x0
Machine has 1 nodes
Processor has 1 cores
Processor has 7 p-states
Processor has 2 boost states

Power States table:
-- Node: 0 Core 0
core 0 pstate 0 (pb0) - En:1 VID:108 FID:5 DID:0.00 Freq:2100 VCore:0.2000
core 0 pstate 1 (pb1) - En:1 VID:108 FID:5 DID:0.00 Freq:2100 VCore:0.2000
core 0 pstate 2 (p0) - En:1 VID:117 FID:3 DID:0.00 Freq:1900 VCore:0.0875
core 0 pstate 3 (p1) - En:1 VID:118 FID:18 DID:1.00 Freq:1700 VCore:0.0750
core 0 pstate 4 (p2) - En:1 VID:120 FID:14 DID:1.00 Freq:1500 VCore:0.0500
core 0 pstate 5 (p3) - En:1 VID:120 FID:10 DID:1.00 Freq:1300 VCore:0.0500
core 0 pstate 6 (p4) - En:1 VID:121 FID:2 DID:1.00 Freq:900 VCore:0.0375

 --- Node 0:
Processor Maximum PState: 6
Processor Startup PState: 4
Processor Maximum Operating Frequency: 2400 MHz

Minimum allowed VID: 123 (0.0125V) - Maximum allowed VID 0 (1.5500V)
Processor AltVID: 54 (0.8750V)

Done.

Wcześniej VCore 900MHz -> 0.1500 - czyli więcej niż teraz 1900MHz!
A obecnie wytłuszczone En:1 było En:0,  co oznaczało, że tryb ten był nieaktywny.

3. Aby zmienić nieaktywny p-state na aktywny, należy wykonać komendę sudo tpc -en 6, gdzie 6 jest numerem p-state.

4. Aby zmienić napięcie sudo tpc -set pstate 6 vcore 0.0375.
Gdzie 6 to numer p-state, a 0.0375 to nowe napięcie. Należy jednak pamiętać, że za duże napięcie może uszkodzić procesor a zbyt niskie spowodować jego niestabilność.

Aby przetestować czy ustawione napięcie jest stabilne, należy ograniczyć procesor do pracy na danej częstotliwości:
echo 900000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 900000 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
I zmusić go do ciężkiej pracy. Do tego wygodny jest program mprime [źródło]. Aby go zdobyć wystarczy użyć tego linka pobrać mprime (np. mprime259.tar.gz), rozpakować, (skopiować mprime do /usr/bin i nadać mu uprawnienia chmod +x) i uruchomić z argumentem -t. Co pozwoli na przetestowanie procesora. Jeśli wyskakują błędy lub komputer się restartuje, trzeba podwyższyć vcore.

5. Aby umożliwić tzw. prędkości boost, wystarczy wydać komendę sudo tpc -boostenabe.

6. Sprawdzone komendy można dodać do /etc/rc.local, aby wykonywały się podczas uruchamiania systemu.

U mnie wygląda to tak:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

#Testing:
#echo N>/sys/module/drm_kms_helper/parameters/poll

#Radeon Dynamic Power Manager applet
chmod a+w /sys/class/drm/card0/device/power_dpm_force_performance_level
chmod a+w /sys/class/drm/card0/device/power_dpm_state

#Turion Power Control
modprobe cpuid
modprobe msr

#It seems that `tpc -boostenable` does NOT work
#Boost is only actually ever used during favorable temperature conditions, and controlled explicitly by the CPU
# https://bbs.archlinux.org/viewtopic.php?id=160616
echo 1 > /sys/devices/system/cpu/cpufreq/boost

#TPC boost
tpc -boostenable
tpc -set pstate 0 vcore 0.2000
tpc -set pstate 1 vcore 0.2000

#TPC for CPU powersave
tpc -en 6

tpc -set pstate 2 vcore 0.0875 #0.0500 - failure #0.0750 #0.1125 #0.1625 #0.2125
tpc -set pstate 3 vcore 0.0750 #0.0750 #0.1125 #0.1625
tpc -set pstate 4 vcore 0.0500 #0.0375 - unstable? #0.0500 #0.0750 #0.1125
tpc -set pstate 5 vcore 0.0500 #0.0750
tpc -set pstate 6 vcore 0.0375 #0.0250 - unstable #0.0500 #0.0500

#tpc -set pstate 2 vcore 0.0500 #kernel machine check failed
#tpc -set pstate 6 vcore 0.0125 #unstable
#tpc -set pstate 6 vcore 0.0250 #unstable

#tpc -rampuptime 8
#tpc -rampdowntime 12

#Max CPU speed (ac and bat!)
echo 1900000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 1900000 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq

exit 0

Uwagi końcowe:
- wygląda na to, że nie trzeba restartować komputera, aby zmiany zostały uznane przez system. Część programów (np. cpufreq-apref, mówi, że nie trzeba), ale cała reszta systemu mówi, że trzeba.
- z boostem, to jest tak, że nie da się go włączyć ręcznie. To wykonywane jest sprzętowo i w określonych warunkach, więc vcore 0.2000 jest ustawione 'na oko'.

poniedziałek, 21 lipca 2014

Atheros AR9462 i inne (ath9k) a oszczędzanie energii

Zabawa powertop zazwyczaj przynosi ciekawe efekty, w zakładce Tunables można znaleźć użyteczne rady takie jak:
Wireless Power Saving for interface wlan0
Aby ten problem rozwiązać wystarczy w pliku /etc/modprobe.d/ath9kps.conf, na końcu linijki ath9k dostawić 'ps_enable=1', w efekcie otrzymujemy coś takiego [źródło]:
options ath9k nohwcrypt=1 ps_enable=1
Takie działanie pozwala zmniejszyć zużycie prądu przez moduł wifi nawet dziesięciokrotnie [źródło]. W większości ath9k oszczędzanie jest uruchomione domyślnie, niestety, dotyczy to głównie modeli 'single chip', co najwyraźniej oznacza, że moduły wifi+bt mają domyślnie wyłączoną tę funkcjonalność [źródło].