קטגוריה: OpenMoko

האקינג לראוטר, או איך להפוך ראוטר לקוד פתוח

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

מאז לא היו לי אתגרים באמת מעניינים בנושא ההאקינג של מכשירים, עד שרכשתי את WDR4300 של TP-Link והחלטתי שאני לא אוהב את הרעיון שאין לי שליטה על הראוטר שלי.

גיליתי שאני מוגבל, היות ובמדינת ישראל יש הגבלת תדרים על ידי משרד הביטחון (ולא משרד התקשורת) – WTF ?!
אז בגלל זה אני למשל לא הייתי יכול לעדכן את הראוטר לגרסה חדשה יותר של TP-Link, כי אין להם הורדה של גרסה "ישראלית" המגבילה תדרים (מצטער אבל זה הזוי).

אז התקנתי openwrt, ופתאום נזכרתי לטובה במוקו, אשר דרש ממני קצת האקינג בשביל לגרום לו לעבוד.
מצאתי את עצמי ב7 בערב עד 1 לפנות בוקר מתאים אותו לצרכים שלי.

זה כיף להיכנס למכשיר דרך telnet ולהתחיל להגדיר את הפצת הלינוקס כפי שאתה רוצה. וזה עוד יותר כיף, כשמערכת החבילות זהה למוקו 🙂 .
אחרי שאתה מגדיר סיסמה ל root, ה telnet מתבטל, ואתה חייב לעבוד עם ssh, שגם עברה מספר שיפצורים על ידי.

אני קיבלתי את הראוטר עם חומרה v1.7, שזה השיפצור האחרון של tplink (נכון לכתיבת הפוסט הזה) בנושא החומרה, ונראה שהכל עובד מהקופסא, אחרי שאפשרתי מספר דברים 🙂

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

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

הראוטר של בזק מנתק את ה wifi כל כמה זמן לכמה שניות. כלומר את המכשירים המחוברים אליו.
מדפסת הרשת שלי, משום מה לא עובדת כמו שצריך עם הראוטר הזה, אבל הכי גרוע זה ה TR-069 שיש בראוטר ואני לא יכול לבטל אותו, הוא סוג של back-door  לכל הראוטרים האלו, המאפשרים לבזק לבצע provision מרחוק, אבל מסכנים את הראוטר לחלוטין.

אז אחרי הרבה התלבטויות, הגיע הזמן פשוט לעבוד עם ראוטר טוב ואיכותי במקום, שאני יכול להחליט עליו כל דבר שרק ארצה, וכמובן שזה מה ש open-wrt מאפשר לי.

אני יכול לבצע אפילו התקנת freeswitch עליו, מגרסת הפיתוח (משום מה), שלא לדבר על אסטריסק, או yate.
התקנה של מרכזיה כדוגמת freeswitch למשל, מאפשרת אם מתבצעת נכון, להעביר את הכוח לסוג של DMZ, שמוגן מתקיפות למינהן, אבל כן מסוגל לבצע שיחות.
אך אין לי כוונה להתקין מרכזיה כלשהי על הראוטר.
אם זה לא מספיק, אני יכול גם להתקין את Kamailio מסדרת שלוש וסדרת ארבע, מה שאומר שאני גם יכול לקבל SIP Proxy שאני יכול לתכנת כפי שאני רוצה, אך גם כאן, זה לא יהיה מה שאעשה.

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

בכל מקרה, אני מאוד נהנה 🙂

dbus לטלפון

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

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

אז במקום לרכוש עכשיו טלפון חדש, החלטתי ללכת על המוקו הקיים, ולגרום לו להיות הטלפון שלי. כאן נתקלתי בבעיה. shr-testing לא מייבא את המידע מהSIM שלי בברירת מחדל, ואני צריך לעבוד מול PISI לסנכרון, אבל PISI יציב בערך כמו גוש קרח באמצע המדבר כשיש 50 מעלות בצל וגיליתי כמה בעיות איתו, שחלקם הצלחתי לתקן בכוחות עצמי (כתוב בפיתון משום מה), וחלק אחד חשוב אני לא יודע כרגע איך לתקן (כי צריך יותר זמן להיכנס לקוד ולהבין אותו וזה לא פשוט).

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

$ mdbus2 -s org.freesmartphone.ogsmd /org/freesmartphone/GSM/Device org.freesmartphone.GSM.SIM.RetrievePhonebook contacts 1 255

התוצאה היא כל רשימת הכתובות שיש לי ב SIM, כך שה SIM שלי תקין לגמרי.

השורה  אומרת לdbus להתחבר לכתובת של org.freesmartphone.ogsmd ואז לקבל את הפונקציות הקיימות מ /org/freesmartphone/GSM/Device ובסוף להפעיל את הפונקציה RetrivePhonebook עם 3 פרמטרים:

  1. סוג ספר הטלפונים (במקרה הזה אנשי הקשר, יש עוד כמה אפשרויות)
  2. מה האינדקס להתחיל ממנו (1 הכי נמוך)
  3. מה המספר האחרון של האינדקס להביא (הכי גדול זה 255)

התוצאה היא רשימה של כל אנשי הקשר שנמצאים ב SIM. מגניב שאפשר לעשות הרבה פעולות ידניות לטלפון. נראה אותכם מדבגים ככה את ה iPhone 😛

חיוג מהיר ל OpenMoko חלק ראשון

מאז העדכון האחרון, בנתיים FPC בגרסה 2.5.1 מכיל bootstrap שעובד במוקו -> ניסיתי עם shr, אז החלטתי לבנות תוכנית לניסוי עם לזרוס עבור OpenMoko.

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

פיתוח למוקו

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

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

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

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

מוקו הסרבני

כבר זמן מה שאני רק נתקל בבעיות עם OpenMoko, בהתחלה היה זה SIM שלא זוהה בכלל, למרות שניסיתי כמה SIM של אנשים שונים, אח"כ אחרי שהחלפתי כרטיס SIM שהחליט לעשות לי בעיות גם בטלפון הרגיל (אנשים שולחים לי מייל שאני לא זמין למרות שהטלפון שלי פתוח ונמצא לידי עם קליטה מלאה), פתאום המוקו החליט להכיר בכל SIM שנכנס אליו (לא ראיתי בספק שהוא גם קורא מחשבות… בכלל לא ראיתי שטלפטיה או אמפטיה מותקנים אצלו… נו טוב). אחרי שעברתי את המסוכה הזו, רציתי להתקין את SHR מחדש. טעות !

פתאום המוקו החליט שכרטיסי זיכרון הם מחוץ לתחום של מוקו, ואני שובר את הראש כל פעם להבין מה לא בסדר. העניין הוא שגם בגרסה שצרובה למכשיר, שלא לדבר על כל מנהל אתחול שקיים (בNOR ובNAND, שזה אומר שניסיתי את Qi ואת u-Boot) לא מצליח להבין שיש לו כרטיס זיכרון. זה לפחות עד ל12 בלילה היום. החלטתי לעשות ניסוי, אחרי שנשיפות מאוד חזקות לנקות את החריצי קריאה לא עזרו, ניגבתי אותם במטלית חלקה ונקייה, וזה נראה שעשה את העבודה.

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

OpenMoko שיר הנושא

לב מ' (שם המשפחה לא ידוע לי לצערי), יצר שיר המבוסס על שיר הנושא של סדרת המדע בדיוני (המדהימה לדעתי האישית) Firefly.

השיר פורסם ברשימת הדיוור של OpenMoko ישראל :

Boot from NOR, flash the NAND
Answer calls with shell command
I don't care, I'm still free
You can not take my phone from me

Keep your hacks and jailbreaks
I ain't never switching back
Source and hardware are free
You can not take my phone from me

Theres no other phone for me
But the one thats running free

You can not take my phone from me

את השיר המקורי עם המילים אפשר למצוא כאן.

מי מתנדב/ת להקליט את השיר החדש ?

על טעויות משלמים

התקנתי השבוע את הדמוי אדם של גוגל (Android) על הNeo FreeRunner שלי.

כבר בבוט הראשון הבנתי את גודל הטעות:

  1. הוא שכתב לי את ה NAND והעיף לי את uBoot
  2. הוא כתב את עצמו לתוך ה NAND למרות שרציתי שירוץ מה μSD (מיקרו SD).
  3. הממשק איטי להחריד
  4. הוא לא תומך בעברית
  5. הוא לא מצליח לקרוא את הרשומות מהSIM, רק להירשם אצל הכתומים
  6. הוא רגיש מאוד ללחיצות -> ניתקתי שיחה והוא חייג לי לעוד מספר "בטעות" כי הייתי על רשימת השיחות האחרונות
  7. הממשק לדעתי האישי לא אינטואיטיבי, למרות שכמה מהאנשים מהעבודה מאוד אוהבים אותו
  8. זה פשוט לא לינוקס. מה הכוונה לא לינוקס ? פרט לספריית etc לא מצאתי בו שום דבר שנראה כמו לינוקס, שלא לדבר על ההתנגות של לינוקס. אפילו פקודות בסיסיות ביותר של יוניקס ש POSIX מגדיר שחייבים להיות במערכת לא קיימות. פשוט אין, ניוק, נאדא, זיפ, כלום
  9. הוא מתנתק אחת ל4-5 דקות מידי פעם בלי סיבה אמיתית, דורון יכול להעיד על כך, וגם עוד כמה אנשים
  10. השמע של הקול כאשר מדברים אינו חזק דיו, ולקח לי הרבה זמן להבין איך בכלל מגבירים את העצמה, וגם אז זה לא עזר בהרבה

וזה רק מה שגיליתי בכמה שעות משחק איתו.

בעבודה אמרו לי "טוב זו גרסה ישנה מאפריל, מה אתה מצפה", ובכן אני מצפה שהוא יתנהג כמו הפצה נורמאלית. אפילו shr unstable שהיה עם dbus שבור התנהג טוב יותר מהחתיכת קוד הזו.

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

אז פשוט ילדים, תלמדו מהטעויות שלי, ואל תנסו את ה"דמוי" "אדם" הזה. אל תדמיינו אפילו לנסות, זה פשוט לא זה. ראו הוזהרתם.

Paroli

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

יש לי כמה דברים שמאוד מפריעים לי במערכות OpenMoko השונות, 3 מהן נפתרו דווקא על ידי גוגל בגישה שדי אהבתי:

  1. הריצה היא של root
  2. כל קרנל מרשה לעצמו לשנות את הנתיבים של proc
  3. הוא מתנהג הרבה פעמים כמו מערכת תלאים יותר מאשר מערכת מתוכננת (מבחינת תוכנות)
  4. הפלסטיקה שלו היתה יכולה להיות מעט יותר גמישה , ולכלול מקום לעט וכו', דבר שלא קיים לצערי.
  5. יש יותר מידי הפצות, קשה לדעת מה לבחור 🙂

אז אנדרואיד פתר את הבעיה של הריצת root על ידי כך שכל שירות הוא משתמש בפני עצמו. הוא פתר את התלאים וכנראה גם את הקטע עם ה proc ו ה dbus (אני לא באמת יודע את זה).

הבעיה העיקרית באנדרואיד שזה רק לינוקס ללא ה gnu (אם כי טרם ניסיתי אותו, ולכן אולי יש עוד הרבה יותר בעיות).

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

לגבי מערכת תלאים, היי זה לינוקס בוקר טוב באמת 🙂

אבל לגבי שינוי הנתיבים של הקרנל, ובכן לזה יש פתרונות. אחד מהם הוא Paroli.

Paroli הוא מתווך (כתוב בפיתון) אשר מגשר בין ה low level לבין ה high level. מתווך כזה נקרא גם middleware והוא מאפשר לקבל אחידות כלשהי מבחינת הגישה לחומרה ב OpenMoko.

אז עכשיו סעיף אחד קיבל מענה ועוד 4 לדרך 🙂

ניסוי בGPS של Neo FreeRunner

החלטתי לעשות כמה ניסויים ל OpenMoko ול Tango GPS היות ובחול המועד אני רוצה לצאת ולשחק קצת ב Geo Caching (במידה וכמה חברים לא יבריזו לי הפעם).

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

הדבר הנחמד במעבד GPS של Neo, הוא בכך שהוא מזהה תזוזה (גם עדינה מאוד), ואת כיוון התזוזה ביחס לצפון. יש עם זה כמה בעיות (או אלי זה Tango), אבל הוא מזהה את ההליכה שלי בתוך הבית, ואפשר לראות מסלול אדום של כל חדר או המסדרון שהייתי בו עם Neo בתוך הבית. אבל אני חייב לציין שמהירות ההליכה שלי קצת מוזרה לי לפי הצורה ש Tango הציג. הוא הציג רוב הזמן שהלכתי בין 6-10 קמ"ש. אבל בממוצע הוא כתב שהלכתי 5.70 קמ"ש בממוצע. ואם זה לא מספיק מוזר, אז כשהוא נמצא על השולחן ולא זז (נשבע לכם) הוא אומר שהשולחן זז בין 1 ל2 קמ"ש.

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

בזמן הטיול גיליתי של Neo חסר דבר אחד מאוד מאוד מאוד מאוד חשוב (בייחוד בקיץ), ואני מבין שבגלל זה הפסיקו את הפיתוח של GTA03 וחזרו להמשיך לפתח את GTA02: גלאי נחשים!

במהלך הטיול ראיתי נחש (10 מטר מהמקום שהייתי). אני לא בטוח אם זה נחש ארסי או לא (כמעט בטוח שזה היה זעמן שחור, אבל אני לא בטוח בזה, ואני לא אוהב לצוד נחשים [או שהם יצודו אותי], אז לא הלכתי לבדוק), אבל בכל מקרה אם הייתי יודע עליו מבעוד מועד אולי הייתי משנה אפילו מסלול. אז לדעתי זה משהו חשוב שמאוד חסר ל Neo 🙂

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

תמיכה של FPC ב OpenMoko

כאשר קיבלתי את Neo התחלתי לבדוק איך לגרום ל FPC לעבוד איתו. בהתחלה שלחתי הודעות ברשימת הדיוור, וגיליתי שגם בני (בנידיקט) מנסה לעשות אותו הדבר, רק לו יש הרבה יותר ניסיון ממני בעובדה עם Embedded.  מסתבר שבכלל יש הרבה מפתחי Embedded בקהילת ה FPC. לכמה מהם אפילו יש Free Runner .

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

הסיבה לקושי הוא בכך שיש 2 סוגי ABI עבור ARM בתמיכה של libc, ו FPC תומכת הרבה שנים כבר בגישה הישנה יותר של ARM אבל כמעט בכלל לא בגרסה החדשה.

הגרסאות השונות נקראות:

  1. OABI – תמיכה טובה במעבדי ARM ישנים, אבל אין תמיכה בהרבה תכונות של מעבדי הARM החדשים יותר (FPC תומכת בצורה טובה ב ABI הזה)
  2. EABI – תמיכה חדשה יותר למעבדי ARM עם יכולות טובות יותר. למשל תמיכה במעבד מתמטי ונקודות צפות ועוד הרבה דברים (ל FPC אין תמיכה טובה בו, היות והמימוש לתמיכה מאוד חדש וכמעט ולא נבדק)

סתם בשביל שתבינו טוב יותר, לקח שבוע בערך לאדם בודד לגרום ל FPC לתמוך בצורה מלאה ב iPhone ו iPod בגלל שהם תומכים ב OABI, ולפי הבנתי כבר יש מוצרים מסחריים שנכתבו עם FPC עבור הפלטפורמות האלו.

בקיצור, בני השקיע הרבה יותר ממני והבין איך אפשר לבנות על לינוקס את FPC בשביל שהוא יתמוך ב OpenMoko . לצרוך התמיכה הזו צריך להדר את binutils בצורה הבאה: להמשיך לקרוא