BinaryVision

Tag: OpenMoko

Linux Kernel Module, באגים ותיקונם

by on יונ.25, 2009, under כללי

בהתעסקותי עם הOpenMoko שלי, גיליתי באג ממש מעצבן בKernel של לינוקס.
או יותר נכון באחד מהמודולים שבאים איתו.
הבאג הוא Null Dereference והנה הסיפור שלו.

מתי זה קורה?

יש לי מחשב Windows XP SP3 בבית, והוא מעודכן עם כל הפאטצ'ים של מיקרוסופט.
באחד מן הימים אני מחבר את המכשיר (OpenMoko) עם כבל USB למחשב, ואני רואה שבWindows לא קורה כלום.
אבל המערכת הפעלה בפלאפון נתקעה, והוא מהבהב את המנורה שמסמנת Kernel Panic.

מה לא ניסיתי?

מיותר לציין שניסיתי לחפש על זה מידע באינטרנט, אבל כיוון שזה בעיה חדשה, שבאה בעקבות בעיה שהWindows חוטף Blue Screen במקרה דומה, אז כל התוצאות חיפוש זה המקרה ההוא, ואף מילה על Kernel Panic.
אחרי דיונים ממושכים עם אנשים בFreenode שעונים פעם בשעה בערך, וגם אז קשה להביא אותם למצב שהם עוזרים איכשהו,
הגעתי למסקנה שצריך את ההודעה של הKernel Panic כדי להבין מה הולך שם, וכדי שאנשים יוכלו לעזור לי יותר טוב.
רק מה, המכשיר לא בדיוק מאפשר לך להתחבר אליו אחרי הPanic ולשאול אותו מה קרה, הדבר היחיד שאפשר לעשות זה לעשות Restart למכשיר ולאבד את ההודעה.
מסתבר שמישהו כתב Patch לקרנל של לינוקס שמאפשר לשמור את ההודעות מערכת בRAM ואז בעליית המערכת פעם הבאה אפשר לבדוק את ההודעות שהיו.

קימפול מחדש של הקרנל עם הPatch

הPatch הוא של Lindi, וקוראים לו ramconsole.
אז דבר ראשון שהייתי צריך זה להשיג את המקור של הKernel בגרסה המתאימה, ואת קובץ ההגדרות שיתאים למכשיר.
את המקור ממש קל להשיג, את הקובץ הגדרות השגתי מהRepository של SHR (הפצה שמותקנת אצלי על הMoko)
דבר שני צריך לשים את הPatch על הקוד מקור, ולוודא שכל החלקים שלו נרשמו בצורה תקינה.
ודבר שלישי, צריך להשיג קומפילר שיקמפל לי למעבד ARM ולא X86, זה הבאתי מהOpenMoko ויקיפדיה שמכיל דף והורדה של הCrosstools שצריך כדי לקמפל דברים למכשיר.
אחרי כל זה, יש לי קרנל, ויש לי מודולים שבאים איתו, ואני מעביר אותם למכשיר, ומתפלל…
המכשיר עולה, הקרנל החדש עובד, נשרא לקמפל את הכלי ramconsole-dump(שגם הוא נכתב ע"י lindi) כדי לראות את ההודעות,
להעביר אותו למכשיר, לגרום לKernel Panic, ולראות את הפלט.

מסתבר שזה לא הכל

כדי לאתחל מחדש את המכשיר אחרי הKernel Panic, אני צריך להוציא סוללה ולהכניס חזרה.
חבל מאד שהפעולה הזאת מוחקת את הRAM שצריך זרם כדי לשמור על המידע שלו.
אחרי שיחה קצרה עם lindi מסתבר שאני צריך לאתחל את הקרנל עם פרמטרים נוספים:

panic=10 mem=127M

הראשון כדי שאחרי 10 שניות מהPanic הוא יעשה אתחול בעצמו, והשני כדי שהוא לא ישתמש בכל הזיכרון וידרוס את הRamconsole כשיעלה שוב.
אז כדי להפעיל את הKernel עם פרמטרים אני צריך להחליף את הBootloader שעל המכשיר, כי כרגע הוא Qi, והוא לא מאפשר עריכת פרמטרים.
אז אני מחליף את הBootloader בu-boot, ונכנס לקונסול שלו (לא פשוט, אבל אני לא אפרט) כדי לערוך את הפרמטרים.
אחרי כל הסיפור, עולה הקרנל, אני מקפיא אותו, אחרי 10 שניות הוא עושה לעצמו Reboot, ואז אני מפעיל את ramconsole-dump לתוך קובץ.
וזהו! יש לי את הdump, נשאר רק למצוא ולתקן את הבעיה. הנה השגיאה מי שרוצה לראות:

<6>[   44.390000] g_ether gadget: full speed config #2: RNDIS
<1>[   44.755000] Unable to handle kernel NULL pointer dereference at virtual address 00000000
<1>[   44.755000] pgd = c0004000
<1>[   44.755000] [00000000] *pgd=00000000
<4>[   44.755000] Internal error: Oops: 17 [#1] PREEMPT
<4>[   44.755000] Modules linked in: sco bnep snd_pcm_oss snd_mixer_oss ar6000 snd_soc_neo1973_gta02_wm8753 snd_soc_s3c24xx_i2s
   snd_soc_s3c24xx s3cmci btusb rfcomm ppp_generic slhc ohci_hcd ipv6 hidp l2cap bluetooth g_ether snd_soc_wm8753 snd_soc_core
   snd_pcm snd_timer snd_page_alloc snd
<4>[   44.755000] CPU: 0    Not tainted  (2.6.29-GTA02_fate-mokodev #2)
<4>[   44.755000] PC is at strlen+0x18/0x2c
<4>[   44.755000] LR is at gen_ndis_query_resp+0x574/0xc38 [g_ether]
<4>[   44.755000] pc : []    lr : []    psr: 60000093
<4>[   44.755000] sp : c0391cf8  ip : c0391d08  fp : c0391d04
<4>[   44.755000] r10: c655b3e0  r9 : 000001c0  r8 : c655b3f4
<4>[   44.755000] r7 : 00000000  r6 : c655b40c  r5 : 00000000  r4 : 00000000
<4>[   44.755000] r3 : bf0672b8  r2 : 00000000  r1 : 00000000  r0 : 00000000
<4>[   44.755000] Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
<4>[   44.755000] Control: c000717f  Table: 371ac000  DAC: 00000017
<4>[   44.755000] Process swapper (pid: 0, stack limit = 0xc0390268)
<4>[   44.755000] Stack: (0xc0391cf8 to 0xc0392000)
<4>[   44.755000] 1ce0:                                                       c0391d2c c0391d08 
<4>[   44.755000] 1d00: bf05f708 c01623e8 c655b3f4 c7b77000 bf0672b8 c64e3aa0 00000000 00000004 
<4>[   44.755000] 1d20: c0391d54 c0391d30 bf05fe48 bf05f1a4 c655b3e0 c09203e4 c0391d64 00000000 
<4>[   44.755000] 1d40: c7b77000 0000004c c0391dec c0391d58 bf06002c bf05fddc c0391d84 c0391d68 
<4>[   44.755000] 1d60: c0070cbc c0070200 c784d000 00000006 c674ca40 c03b5b14 c64e3aa8 c0391dc4 
<4>[   44.755000] 1d80: c0391d98 c01e9d68 c01e808c c0367c68 c02d37b8 c03b5b14 00000000 c03934c8 
<4>[   44.755000] 1da0: 00000000 00000000 00000000 0000000a c0391e04 c0391dc0 c006ed3c c006d3cc 
<4>[   44.755000] 1dc0: c0391de4 c64e3aa8 c7b0be00 00000000 c64e3aa0 00000000 000001c0 00000004 
<4>[   44.755000] 1de0: c0391e14 c0391df0 bf06075c bf05fea4 00000000 30025864 c0391e4c c64e3aa0 
<4>[   44.755000] 1e00: c03b5b14 00000000 c0391e34 c0391e18 c01e7f2c bf060740 c08be5d4 00000001 
<4>[   44.755000] 1e20: c08be5d4 00000000 c0391e74 c0391e38 c01e8dc0 c01e7ee0 00000001 00000000 
<4>[   44.755000] 1e40: c03b5b14 c7b77000 c0390000 00000001 c03b5af0 00000000 c03b5b14 00000001 
<4>[   44.755000] 1e60: 00000000 c64e3aa0 c0391eac c0391e78 c01e92f8 c01e8bd0 c02b3b14 c0070bb8 
<4>[   44.755000] 1e80: 00000001 c03b5af0 00000000 00000001 00000000 00000000 00000000 c08be5d4 
<4>[   44.755000] 1ea0: c0391ef4 c0391eb0 c01e977c c01e9194 00000000 00000001 c007026c 00000001 
<4>[   44.755000] 1ec0: 00000000 40000093 00000000 c79bfa40 00000000 00000000 00000029 00000001 
<4>[   44.755000] 1ee0: c0390000 30025864 c0391f14 c0391ef8 c007c3e4 c01e95ac c03a0360 00000029 
<4>[   44.755000] 1f00: c79bfa40 c03a0394 c0391f34 c0391f18 c007df34 c007c3c8 00000029 00000000 
<4>[   44.755000] 1f20: 02000000 00000002 c0391f4c c0391f38 c002a054 c007de20 ffffffff f4000000 
<4>[   44.755000] 1f40: c0391fa4 c0391f50 c002a958 c002a010 00000001 00000032 f4100000 60000013 
<4>[   44.755000] 1f60: c002c554 c0390000 c00282a8 c0395008 30025900 41129200 30025864 c0391fa4 
<4>[   44.755000] 1f80: c0391f88 c0391f98 c002be20 c002c5a0 60000013 ffffffff c0391fbc c0391fa8 
<4>[   44.755000] 1fa0: c002c344 c002c564 c08af150 c03bf744 c0391fcc c0391fc0 c02aeff0 c002c318 
<4>[   44.755000] 1fc0: c0391ff4 c0391fd0 c0008ae0 c02aef98 c000858c 00000000 00000000 c0027ea4 
<4>[   44.755000] 1fe0: c0007175 c03bfbec 00000000 c0391ff8 30008034 c00088e8 00000000 00000000 
<4>[   44.755000] Backtrace: 
<4>[   44.755000] [] (strlen+0x0/0x2c) from [] (gen_ndis_query_resp+0x574/0xc38 [g_ether])
<4>[   44.755000] [] (gen_ndis_query_resp+0x0/0xc38 [g_ether]) from [] (rndis_query_response+0x7c/0xc8 [g_ether])
<4>[   44.755000] [] (rndis_query_response+0x0/0xc8 [g_ether]) from [] (rndis_msg_parser+0x198/0x3c8 [g_ether])
<4>[   44.755000]  r6:0000004c r5:c7b77000 r4:00000000
<4>[   44.755000] [] (rndis_msg_parser+0x0/0x3c8 [g_ether]) from [] (rndis_command_complete+0x2c/0x70 [g_ether])
<4>[   44.755000] [] (rndis_command_complete+0x0/0x70 [g_ether]) from [] (s3c2410_udc_done+0x5c/0x70)
<4>[   44.755000]  r6:00000000 r5:c03b5b14 r4:c64e3aa0
<4>[   44.755000] [] (s3c2410_udc_done+0x0/0x70) from [] (s3c2410_udc_read_fifo+0x200/0x274)
<4>[   44.755000]  r6:00000000 r5:c08be5d4 r4:00000001
<4>[   44.755000] [] (s3c2410_udc_read_fifo+0x0/0x274) from [] (s3c2410_udc_handle_ep0+0x174/0x1c4)
<4>[   44.755000] [] (s3c2410_udc_handle_ep0+0x0/0x1c4) from [] (s3c2410_udc_irq+0x1e0/0x298)
<4>[   44.755000] [] (s3c2410_udc_irq+0x0/0x298) from [] (handle_IRQ_event+0x2c/0x68)
<4>[   44.755000] [] (handle_IRQ_event+0x0/0x68) from [] (handle_edge_irq+0x124/0x174)
<4>[   44.755000]  r7:c03a0394 r6:c79bfa40 r5:00000029 r4:c03a0360
<4>[   44.755000] [] (handle_edge_irq+0x0/0x174) from [] (__exception_text_start+0x54/0x6c)
<4>[   44.755000]  r7:00000002 r6:02000000 r5:00000000 r4:00000029
<4>[   44.755000] [] (__exception_text_start+0x0/0x6c) from [] (__irq_svc+0x38/0xc8)
<4>[   44.755000] Exception stack(0xc0391f50 to 0xc0391f98)
<4>[   44.755000] 1f40:                                     00000001 00000032 f4100000 60000013 
<4>[   44.755000] 1f60: c002c554 c0390000 c00282a8 c0395008 30025900 41129200 30025864 c0391fa4 
<4>[   44.755000] 1f80: c0391f88 c0391f98 c002be20 c002c5a0 60000013 ffffffff                   
<4>[   44.755000]  r5:f4000000 r4:ffffffff
<4>[   44.755000] [] (default_idle+0x0/0x54) from [] (cpu_idle+0x3c/0x68)
<4>[   44.755000] [] (cpu_idle+0x0/0x68) from [] (rest_init+0x68/0x7c)
<4>[   44.755000]  r5:c03bf744 r4:c08af150
<4>[   44.755000] [] (rest_init+0x0/0x7c) from [] (start_kernel+0x208/0x268)
<4>[   44.755000] [] (start_kernel+0x0/0x268) from [<30008034>] (0x30008034)
<4>[   44.755000]  r5:c03bfbec r4:c0007175
<4>[   44.755000] Code: e24cb004 e1a02000 ea000000 e2800001 (e5d03000) 
<0>[   44.760000] Kernel panic - not syncing: Fatal exception in interrupt
<0>[   44.765000] Rebooting in 10 seconds..arch_reset: attempting watchdog reset

תיקון המודול בקרנל

הCrash Dump ממש מדוייק, עד כדי הפונקצייה האחרונה שהורצה, ומאיזה קובץ.
תודות לעזרה של TAsn ושל עוד בחור מFreenode, הם הצליחו למצוא את הבעיה בקוד של rndis.c.
ומה שמסתבר שמי שכתב את זה הניח שאחד הפרמטרים לא יכול להיות Null, ועשה עליו strlen().
מה שגרם לstrlen לעשות Null Dereference ולמות.
התיקון היה להוסיף כמה שורות שממציאות שם לDevice, ומחיזרות את השם המומצא.

התיקון

--- a/drivers/usb/gadget/rndis.c
+++ b/drivers/usb/gadget/rndis.c
@@ -294,9 +294,14 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
 	/* mandatory */
 	case OID_GEN_VENDOR_DESCRIPTION:
 		pr_debug("%s: OID_GEN_VENDOR_DESCRIPTION\n", __func__);
+#if 0
 		length = strlen (rndis_per_dev_params [configNr].vendorDescr);
 		memcpy (outbuf,
 			rndis_per_dev_params [configNr].vendorDescr, length);
+#endif
+		const char vendorDescr[]="dummy";
+		length = strlen (vendorDescr);
+		memcpy (outbuf,	vendorDescr, length);
 		retval = 0;
 		break;

לסיכום

לאחר תיקון הבאג, הקרנל עובד, מתחבר לווינדווס מזדהה כמו שצריך כRNDIS Device,
וכולם שמחים ומאושרים, או יותר נכון אני שמח ומאושר שאני יכול לחזור לעבוד על תוכנות במכשיר 🙂

אתם מוזמנים להגיב ולשאול דברים אם תרצו….

6 Comments :, , , , more...

פיתוח Mokonnect

by on יונ.05, 2009, under כללי

מבוא

נמאס לי מתוכנות לא טובות ליצירת חיבור עם הMoko.
הסיבה העיקרית שאני לא משתמש בו כרגע כמו שהייתי רוצה להשתמש זה בגלל שאין לו תוכנת ניהול חיבורים נורמלית.
מה זה שווה שיש למכשיר מיליון שיטות התקשרות כשאני צריך כל פעם לכתוב סרטיפט או פקודות בShell כדי להתחבר לאנשהו.
אז חשבתי שהגיע הזמן שגם אני אפתח לזה משהו, ונראה איך זה יצא.
בינתיים זה הולך לא רע, בהמשך אני כותב על התהליך ההתחלתי של הפיתוח.
וכמובן בסוף יש את המצב הנוכחי, וקישור למקור.

קווים מנחים

כמובן שלא מתחילים לכתוב תוכנה בלי שיודעים איזה בעיות היא צריכה לפתור, ואיזה אפשרויות צריך שיהיה לה…

  • שימוש קל כשרוצים לעשות משהו פשוט
  • אפשרות לשימוש בכל אחת משיטות החיבור
  • שימוש מתקדם אפשרי למי שרוצה בכך
  • אפשרות לשמור מצבים ולהחליף ביניהם בצורה מהירה

Mockup

תמונות שציירתי עוד לפני שהתחלתי לפתח (כדי לראות איך זה יראה, ואם זה נוח לשימוש):

מסך ראשי

מסך ראשי


רשת USB

רשת USB


Wifi

Wifi


ניתוב

ניתוב

שיטות שימוש

התחברות לרשת אלחוטית פעם אחת

פותחים את התוכנה, לוחצים על Wifi, מכוונים את ההגדרות, לוחצים על Apply, מחכים שהוא יתחבר ויציג פלט, ויוצאים מהתוכנה

התחברות לרשת אלחוטית יותר מפעם אחת

פותחים את התוכנה, לוחצים על Wifi, מכוונים את ההגדרות, לוחצים על Apply, מחכים שהוא יתחבר ויציג פלט, בתפרטי הראשי מסמנים את Wifi, ולוחצים על Save Profile, כותבים את שם הפרופיל ותיאור קצר, שומרים ויוצאים.
בפעם הבאה שנכנסים ורוצים להתחבר לאותה רשת, לוחצים פשוט על Select Profile בוחרים את שם הפרופיל וזה עושה הכל לבד.

התחברות לGPRS וניתוב האינטרט לחיבור USB

פותחים את התוכנה, מגדירים את החיבור USB, לוחצים Apply, כנ"ל גם החיבור GPRS, לוחצים Apply,
הולכים לRoute, מגדירים שם מי החיבור הראשי, מאיפה לוקחים DNS, ומי נמצא בNAT וכאלה, לוחצים Apply,
בתפריט הראשי שומרים את הפרופיל, ופעם הבאה ההגדרות האלה יהיו במרחק בחירת פרופיל מתוך רשימה.

סביבת פיתוח

אני לא רציתי לעבוד ישירות על המכשיר, רציתי לעבור על המחשב, לייצר את התוכנה עד כמה שאפשר מחוץ למוקו.
ורק כשצריך להעביר אותה לשם ולבדוק.
מה שמצריך משהו שמדמה לי את מערכת ההפעלה שיש במוקו, ונותן לי את אותם הספריות בפייטון שאני אוכל לעבוד איתן.
בחירות שעשיתי לגבי מבנה המערכת אצלי:

סביבת הפיתוח

סביבת הפיתוח

  • VMWare Workstation – כי זה מהיר מאד בWindows, ונוח…
  • Slackware 12.2 – אם יש כלי פיתוח כלשהו שצריך ומשתמשים בו בעולם, אז הוא קיים בהתקנה הבסיסית של Slackware.

דברים שהתקנתי ובעיות שפתרתי:

  • Enlightment DR17 – החדש שהמוקו מריץ (בעזרת סרקריפט easy_e17.sh שלוקח לו שנים לרוץ)
  • Illume-SHR Profile – ערכת נושא והגדרות לillume (מתוך הGIT של הפרוייקט)
  • הגדרת DPI נכונה – ההגדרה צריכה להיות פי 2 יותר קטנה מהDPI הנוכחי. (בתוך הX11 כבר)
  • e17 Python Bindings – אני רוצה לבנות את התוכנה בPython (מתוך המקור של e17)

עכשיו יש לי סביבת פיתוח שמדמה איך הדברים יראו ובערך יעבדו המוקו.

התקדמות

תמונת מסך: מסך ראשי

תמונת מסך: מסך ראשי


מי שרוצה לראות את הקוד בצורה יפה: http://code.assembla.com/shrdev/subversion/nodes/Mokonnect/trunk
קישור לSVN למי שרוצה: http://subversion.assembla.com/svn/shrdev/Mokonnect/trunk
כפי ששמתם לב אני משתמש בAssembla לצרכי שמירת הקוד שלי, ואולי גם אשתמש בWiki שם לצורך תיעוד.
בכל מקרה המצב של הקוד כרגע לא משהו.
יש GUI, בערך קרוב למה שתכננתי, ויש גם את ההגדרות של USB Network,
כל השאר לא פעיל בינתיים.
בתוך ההגדרות של USB Network, אני נלחם עם Apply בצורה חכמה,
תמונת מסך: USB

תמונת מסך: USB


כך שבזמן שאני עושה פעולות הוא לא יתקע את הGUI ויעדכן אותו עם הודעות התקדמות.
זה יותר קשה משציפיתי בגלל שהToolkit לא תומך בThreads יותר מדי.
בכל מקרה, עד כאן להיום.

תשאירו תגובות, הערות, הצעות לשיפור, או בכלל אם יש לכם משהו להגיד.

9 Comments :, , , , more...

פלאפון פתוח זה טוב לפרטיות

by on מאי.29, 2009, under כללי

הפוסט הזה הוא פסוט תגובה לפוסט שנמצא בלינק הזה: אבטחה ופרצות ברשת ה GSM שם הוסבר איך אפשר לחטוף פלאפון ולהאזין לרעשי רקע שבסביבה שליד הפלאפון.

אתחיל בלהרחיב קצת על סיבה נוספת ללמה המתקפה שמתוארת שם אפשרית, ואמשיך בלהסביר למה פלאפון פתוח זה טוב בשביל כולנו.

אין כרטיס קול בפלאפונים
בעקרון, בכל הפלאפונים "הפשוטים" אין כרטיס קול, ועד כמה שאני יודע (דרוש אימות), גם בפלאפונים המתקדמים יותר, כמו N95, Iphone ודומיהם.
למה הם עושים את זה? שמעתי כל מיני שמועות, על כך שהפרוטוקול של GSM (שכמובן סגור תחת NDA) מכיל פסקה הדורשת חיבור ישיר בין ה GSM לבין מערכות השמע (ככה"נ לבקשת האח הגדול), אם זה אכן המצב, GSM הוא התגלמות הרשע, אם לא, אז GSM עדיין דפוק מהסיבות שהסבירו מקודם. יכול להיות שמדובר בחיסכון בעלויות ובמשקל של המכשיר, ואם כן, זה תירוץ מתקבל אבל עדיין יוצר בעיה רצינית.
דבר זה גורם, שגם אם המכשיר כבוי, או גם אם המשתמש היה רוצה, הוא *לא* יכול לכבות את החיבור בין ה GSM לבין אביזרי השמע, מה שאומר ש*תמיד* אפשר לצוטט לו, וזה לא בשליטתו, למען האמת, גם אם היה לפלאפונים כרטיס קול, בגלל שהם סגורים לא היה למשתמש שליטה מלאה עליהם, ולא היה אפשר לוודא שאכן החיבור סגור.
אז בעצם, אפילו עם כל מאפייני האבטחה החלשים של ה GSM, אם היה לנו שליטה על מה קורה בפלאפון, לא היה אפשר להאזין לנו, אבל כמו שאנחנו רואים, אין זה המצב.

מה קורה באופן מוקו
באופן מוקו יש כרטיס קול, ובגלל ש*הכל* בו פתוח, אנחנו יכולים להיות בטוחים שאף אחד לא מאזין לנו, אפשר פשוט לכבות את החלק שאחרי על החיבור בין ה GSM לבין הכרטיס קול, והופה, אנחנו בטוחים. אז איך זה בעצם מתאפשר? ובכן, בגלל שהפלאפון פתוח, אני יודע שכאשר אני מכבה משהו, הוא מכובה, ובנוסף, ה"מבנה" של המוקו כמו שהוא, נבנה בפיקוח מלא של הקהילה, אשר יש בה אנשים מבינים שידעו להכריח הפרדה כזו, כי הרי, אף אחד לא אוהב שמאזינים לו…

מה אפשר לעשות?
אם יש לכן קצת ידע באלקטרוניקה, אפשר לעשות "eavesdrop-proofing" לפלאפון ע"י הוספת מתג שאחראי על ניתוק המיקרופון של הפלאפון ברמת החומרה, זה כמובן יבטל את האחריות, ועוד הרבה בלאגנים, אבל זה הפתרון הכי טוב!
למען האמת, הפתרון הכי טוב הוא לקנות פלאפון פתוח, ואולי ללחוץ על ייצור של עוד כאלה. בכלל, למוקו יש עוד שימושים מעניינים שאני אכתוב עליהם בעתיד, אם מישהו מעוניין: openmoko לקריאה נוספת על האופן מוקו.

אז בקיצור, תמיד תניחו שמאזינים לכם, וגם בישיבות עסקיות עם מידע עסקי חשוב, מומלץ לכבות את הפלאפון, כי בתאכלס, כל אחד יכול להאזין לכם, בקלות…

8 Comments :, , , more...

מערכת ההפעלה של גוגל (Android)

by on ינו.25, 2009, under כללי

פתיח

מי שלא יודע על מה אני מדבר בכלל,
אז גוגל (Google) הוציאו מערכת הפעלה לטלפונים ניידים ושהקוד מקור שלה פתוח לכולם, וקוראים לה Android.
http://www.android.com

יצא לי להתקין את הPort של המערכת לNeo FreeRunner של OpenMoko.
והנה כמה התרשמויות שלי לגבי הbeta2 של המערכת שהועבר לFreeRunner תודות לעבודתם הקשה של אנשי קהילת הקוד הפתוח שהחליפו פקודות שמיועדות לArm5 בפקודות שמיועדות לArm4, והוסיפו דריברים מתאימים כך שאני אוכל להתקין את הAndroid על המוקו.
הbeta2 יצא לא מזמן (22 לינואר נדמה לי) אז הורדתי אותו והתקנתי.
http://freerunner.android.koolu.com/release-files

Booting Android

התקנה

עבר חלק יחסית לזה שהסוללה של המוקו שלי די התרוקנה מאז פעם אחרונה ששיחקתי איתו.

  • מורידים את הkernel image, עושים Flash בעזרת dfu-util בWindows, מחכים איזה 2-3 דקות.
  • מורידים את הrootfs (מערכת הקבצים), עושים Flash בעזרת dfu-util, מחכים איזה משהו כמו 20 דקות (זה ממש ארוך…)
  • בהזדמנות גם עדכנתי את Qi לגרסה החדשה (זה הBootLoader החדש, והוא עובד די טוב עם Android)

שלפתי את הכרטיס 512 מגה שבא יחד עם המכשיר, הכנסתי אותו למחשב הנייד ופירמטתי אותו ל 2 מחיצות בעזרת Acronis Disk Director.
מחיצה ראשונה Fat32 בגודל 256, והשנייה Ext3 בגודל 256.
אני לא מכניס SIM Card, כי אין לי אחד מיותר, ואני יודע שהAndroid יעלה אצלי גם בלי הSIM.
אחרי כל ההתקנה, מפעילים את המכשיר.

Running Android

התרשמות

  • לוקח למכשיר די הרבה זמן לעלות בפעם הראשונה (הוא בטח כותב מלא דברים לכרטיס זיכרון)
  • נראה נחמד, אפשר לעבוד איתו עם האצבעות, לא צריך עט (יתרון גדול)
  • עובד חלק, תפריטים זזים בקצב טוב
  • גילוי לחיצות מדויק בצורה מפתיעה (מפתיעה כי בשאר ההפצות כמעט בלתי אפשרי לעבוד עם אצבעות)

בעיות

חשוב לשים לב שהבעיות כאן נובעות כמעט כולן מהPort של אנדרויד לOpenMoko, ולא משליך על הG1 המקורי.

  • המקלדת הוירטואלית צריכה עוד עבודה, היא לא כלכך נוחה, ולא עובדת בכל המקומות (למשל הקלדת שם הרשת האלחוטית)
  • לא הצלחתי לגרום לWifi לעבוד, הוא גם לא מזהה רשתות בעצמו מסביב, וגם אחרי שאני סופסוף מצליח להעתיק טקסט בNotes ולשים אותו בטקסט של הוספת רשת חדשה, הוא כותב לי גם שלא יכול לשמור את הרשת…
  • Bluetooth לא נדלק…

מסקנות

אני עוד לא הולך להשתמש בהפצה הזאת כהפצה ראשית,
יש לה עוד בעיות, שכנראה יתוקנו ע"י האנשים בקהילה.
ברגע שאני אצליח לפתור Wifi או Bluetooth, אני אכתוב על זה משהו…

2 Comments :, , , more...

מחפש משהו?

תשתמש בטופס למטה כדי לחפש באתר: