מדריך USB
מתוך הויקי של ג'נטו.
מדריך התקנה זה הוא תרגום של מדריך ה-USB הרשמי של ג'נטו.
תוכן המדריך מוגן בזכויות יוצרים של כותבי המדריך המקורי.
התרגום בוצע באישור הרשיון שבו פורסם המסמך המקורי, Creative Commons - Attribution / Share Alike.
על התרגום חלים אותם תנאי רשיון כמו למקור התוכן. המדריך תורגם על ידי oc666.
תוכן העניינים |
[עריכה] מבוא
[עריכה] מה זה USB?
ר"ת של USB הן Universal Serial Bus וזהו באופן בסיסי ממשק חיצוני סטנדרטי שמאפשר תקשורת בין המחשב לבין אביזרים אחרים. חלק מהתקני ה-USB הנפוצים ביותר כיום הם מקלדות, עכברים, כוננים ניידים, מצלמות דיגיטליות, צורבי תקליטורים ו-DVD חיצוניים, מדפסות ועוד.
כיום, ישנם שתי גירסאות של USB בשימוש, USB 1.1 ו-USB 2.0. מכיוון ש-USB תואם לאחור לגירסאותיו הישנות, USB 2.0 תואם גם ל-USB 1.1. ההתקנים האחרונים הם לרוב תואמי USB 2.0. USB 2.0 תומך להעברת מידע מקסימלית של 480 מבל"ש (מגה ביט לשנייה) או 60 מבל"ש וזהו ההבדל המשמעותי בין שתי הסנדרטיים. יתרון נוסף שיש ל-USB הוא שההתקנים כולם הם חיבורים חמים, משמעו שאתה לא חייב לאתחל את המערכת כדי לאפשר את השימוש בהתקנים.
[עריכה] ממבט הטכני
לפני שנתחיל באפשריות ההגדרה של הקרנל, זה יהיה מתאים להסתכל על USB בפרוטרוט. אם אתה ממהר או רוצה לדלג על חלק זה, לך בבקשה לתצורת הקרנל.
למערכת USB יש בקר מארח (host controller), האב (hub), שורש האב (root hub) בין אחרים ויכול לתמוך עד 127 התקני USB כולל האבים. בקר מארח הוא לא אחר מאשר ממשק חומרה בין התקן ה-USB לבין מערכת ההפעלה. ישנם שני סוגי HCI (ממשק בקר מארח;Host Controller Interface) בשימוש כיום והם OHCI (שהוא Open HCI) של קומפאק, UHCI (שהוא Universal HCI) ו-EHCI (שהוא Enhanced HCI), שניהם של אינטל. OHCI ו-UHCI הם שני סטנדרטיים תעשייתיים של ממשקי USB 1.1, כאשר ה-EHCI הוא עבור USB 2.0.
ספקי החומרה מספקים ממשק עבור המתכנת שמאפשר למערכת לתקשר עם החומרה וזה נקרא HCD או Host Controller Device (התקן בקר מארח). דרך ה-HCD ההתקן מתקשר עם תוכנת המערכת. התרשים הבא אמור לעשות את הדברים קלים להבנה.
| קוד: ארכיטקטורת USB כללית |
(תוכנה מורכבת מרכיבים נוספים כמו תוכנת התקן (דרייבר), אבל עבור פשטות הן לא מופיעות)
+ ---- Hardware ---- + ---- Software ---- +
| | |
| [USB Dev] -+-> {EHCI} -+---> ( EHCD ) |
| | | | User
| `-> {UHCI} -+---> ( UHCD ) |
| | |
+ ---- Hardware ---- + ---- Software ---- +
|
התקן USB יכול להשתמש בדרייבר מותאם או להשתמש באחד שקיים כבר במערכת וזה מבוסס על המושג של מחלקת התקן. זה אומר שאם התקן שייך למחלקה מסוימת, אזי כל ההתקנים האחרים השייכים לאותו מחלקה יוכלו להשתמש באותו דרייבר של ההתקן. חלק מאותם מחלקות הן USB HID (שזה Human Interface Devices; בתרגום ישיר: התקני ממשק אנושיים), מחלקה שמכסה התקני קלט כמו מקלדות ועכברים, מחלקת התקני אחסון USB מכסה על התקנים כמו עטי זיכרון (דיסק און קי) מצלמות דיגיטליות, נגנים ועוד ו-USB CDC (שזה Communication Devices Class; בתרגום ישיר: מחלקת התקני תקשורת) שזה מכסה ביסודו מודמים USB והתקנים דומים.
[עריכה] מה יש במחשב שלך?
זה מאוד פשוט למצוא אם למחשב שלך יש תמיכה ב-USB 2.0 או לא. נעשה שימוש בפקודה lspci עבור מטרה זו.
| שים לב: כלי ה-lspci הוא חלק מהחבילה sys-apps/pciutils. אם לא התקנת זאת, בצע את הפקודה emerge pciutils. שים לב בבקשה שעליך להריץ את הפקודה lspci כמשתמש מנהל. |
| קוד: פלט lspci |
(במערכת תואמת USB 1.1, הפלט הוא UHCI בלבד) # lspci -v | grep USB 0000:00:04.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB (rev 01) (prog-if 00 [UHCI]) (במערכת תואמת USB 2.0, הפלט הוא EHCI ו-UHCI) 00:1d.0 USB Controller: Intel Corp. 82801DB USB (Hub #1) (rev 01) (prog-if 00 [UHCI]) 00:1d.1 USB Controller: Intel Corp. 82801DB USB (Hub #2) (rev 01) (prog-if 00 [UHCI]) 00:1d.2 USB Controller: Intel Corp. 82801DB USB (Hub #3) (rev 01) (prog-if 00 [UHCI]) 00:1d.7 USB Controller: Intel Corp. 82801DB USB EHCI Controller (rev 01) (prog-if 20 [EHCI]) |
בעזרת השימוש בפקודה lspci, נוכל למצוא אם המערכת תומכת ב-USB 2.0. זה שימושי כדי לאפשר את האפשרויות המתאימות בקרנל.
[עריכה] תצורת הקרנל
[עריכה] השג את הקרנל
| שים לב: מאז גירסת 2005.0, ג'נטו לינוקס משתמש ב-2.6 כקרנל ברירת מחדל.
אם אתה לא משתמש באופן ספציפי בפרופיל 2.4, gentoo-sources יהיה בגירסת 2.6 על רוב הארכיטקטורות. בדוק בבקשה את גירסת הקרנל שלך ואז המשך בתצורה בהתאמה. |
קודם כל התקן הקרנל לפי בחירתך. כאן נשתמש ב-gentoo-sources. למידע נוסף על קרנלים אפשריים, כנס לכאן.
| קוד: התקנת הקרנל |
# emerge gentoo-sources |
עכשיו, בואו נמשיך עם המשימה של הגדרת הקרנל.
| קוד: כניסה למקור (הקרנל) |
# cd /usr/src/linux # make menuconfig |
| שים לב: הדוגמא הנ"ל מניחה ש-usr/src/linux/ הוא קישור (symlink) שמצביע למקור הקרנל שתרצה להשתמש. וודא זאת, בבקשה, לפני שתמשיך |
[עריכה] הגדרת אפשרויות עבור 2.6.x
כעת נסתכל על אפשרויות שנתצטרך לאפשר בקרנל 2.6 כדי לוודא תמיכת USB עבור ההתקנים שלנו. אם אתה משתמש בקרנל 2.4, המשך בבקשה להגדרת אפשרויות עבור 2.4.x
| שים לב: הדוגמאות במאמר זה יראו אפשרויות תצורה עבור תמיכת USB בסיסית וכמו כן הנפוצות ביותר, לדוגמא, התקן אחסון USB (דיסק און קי). אם יש באמתחתך התקן USB ספציפי שצריך להגדיר, חפש מדריך של התקן זה כדי לראות אם להתקן זה יש תמיכה בתוך הקרנל או שישנו דרייבר ספציפי שתוכל להשתמש. שים לב בבקשה לקלות, לכל הדוגמאות יש אפשרויות לקמפול בתוך הקרנל. אם תרצה קרנל מודולרי, וודא שסימנת מודולים שונים וכוונן את קבצי התצורה שלך בהתאם |
| קוד: אפשרויות עבור קרנל מסדרה 2.6 |
Device Drivers --->
SCSI device support --->
(למרות ש-SCSI יאופשר אוטומטית כאשר תבחר באחסון USB, אנו נצטרך לאפשר תמיכת דיסק)
--- SCSI support type (disk, tape, CD-ROM)
<*> SCSI disk support
(אח"כ חזור אחורה קצת והגע לתמיכת USB)
USB support --->
(זהו שורש האב וזה נדרש עבור תמיכת USB.
אם תרצה לקמפל זאת כמודול, זה ייקרא usbcore)
<*> Support for Host-side USB
(אפשר אפשרות זו כדי לראות את התקני ה-USB ב-proc/bus/usb/ (מומלץ))
[*] USB device filesystem
(סמן לפחות אחד מהתקני ה-HCD. אם אינך בטוח, סמן את כולם)
--- USB Host Controller Drivers
<*> EHCI HCD (USB 2.0) support
< > OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
(גלגל קצת למטה, ותגיע ל-CDC והתקני אחסון)
< > USB Modem (CDC ACM) support
<*> USB Printer support
<*> USB Mass Storage support
[*] USB Mass Storage Write-Protected Media Detection (EXPERIMENTAL)
(אח"כ HID bits.
עליך לבחור תמיכת קלט HID אם יש לך מקלדת, עכבר, ג'ויסטיק או כל התקן קלט USB אחר)
--- USB Input Devices
<*> USB Human Interface Device (full HID) support
[*] HID input layer support
(אם יש לך כרטיס רשת USB, כמו RTL8150, תצטרך את זה)
USB Network Adapters --->
<*> USB RTL8150 based ethernet device support (EXPERIMENTAL)
(אם יש לך מתאם סריאל ל-USB כמו פרוליפיק 2303, תצטרך את זה)
USB Serial Converter support --->
<*> USB Serial Converter support
<*> USB Prolific 2303 Single Port Serial Driver (NEW)
|
כעת, שאפשרויות הקרנל הוגדרו, תוכל לקמפל (מחדש) את הקרנל ותמיכת USB צריכה להיות פונקציונאלית כאשר תאתחל את המערכת לתוך הקרנל החדש. תוכל כעת להמשיך לפרק בדיקת USB ולבדוק אם הכל עובד כשורה.
[עריכה] הגדרת אפשרויות עבור 2.4.x
כעת נסתכל על אפשרויות שנתצטרך לאפשר בקרנל 2.4 כדי לוודא תמיכת USB עבור ההתקנים שלנו. אם אתה משתמש בקרנל 2.6, המשך בבקשה להגדרת אפשרויות עבור 2.6.x
| שים לב: הדוגמאות במאמר זה יראו אפשרויות תצורה עבור תמיכת USB בסיסית וכמו כן הנפוצות ביותר, לדוגמא, התקן אחסון USB (דיסק און קי). אם יש באמתחתך התקן USB ספציפי שצריך להגדיר, חפש מדריך של התקן זה כדי לראות אם להתקן זה יש תמיכה בתוך הקרנל או שישנו דרייבר ספציפי שתוכל להשתמש. שים לב בבקשה לקלות, לכל הדוגמאות יש אפשרויות לקמפול בתוך הקרנל. אם תרצה קרנל מודולרי, וודא שסימנת מודולים שונים וכוונן את קבצי התצורה שלך בהתאם |
| קוד: אפשרויות עבור קרנל מסדרה 2.4 |
(ההגדרה המיידית היא רק עבור אלה שיש להם התקני קלט USB
תמיכת קלט זקוקה אח"כ ע"י USB HID)
Input core support --->
<*> Input core support
< > Keyboard support
< > Mouse support
< > Event interface support
USB support --->
(זהו שורש האב וזה נדרש עבור תמיכת USB.
אם תרצה לקמפל זאת כמודול, זה ייקרא usbcore.o)
<*> Support for USB
(אפשר אפשרות זו כדי לראות את התקני ה-USB ב-proc/bus/usb/)
This is recommended.)
[*] Preliminary USB device filesystem
(סמן לפחות אחד מהתקני ה-HCD. אם אינך בטוח, סמן את כולם)
--- USB Host Controller Drivers
<*> UHCI Alternate Driver (JE) support
< > OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
(זהו פרק ההתקנים. סמן רק את מה שאתה צריך)
--- USB Device Class drivers
< > USB Audio support
<*> USB Mass Storage support
< > USB Modem (CDC ACM) support
<*> USB Printer support
(המשך לפרק HID. זה דרוש, אם אתה משתמש בהתקן קלט מבוסס USB)
--- USB Human Interface Devices (HID)
<*> USB Human Interface Device (full HID) support
[*] HID input layer support
(אם יש לך מתאם סריאל ל-USB כמו פרוליפיק 2303, תצטרך את זה)
USB Serial Converter support --->
<*> USB Serial Converter support
<*> USB Prolific 2303 Single Port Serial Driver (NEW)
|
כעת, שאפשרויות הקרנל הוגדרו, תוכל לקמפל (מחדש) את הקרנל ותמיכת USB צריכה להיות פונקציונאלית כאשר תאתחל את המערכת לתוך הקרנל החדש.
[עריכה] בדיקת USB
[עריכה] dmesg הוא החבר שלך!
סוף סוף הגיע הזמן לשחק עם התקני USB האלו :-) אז בואו נתחיל. בפרק נראה כיצד המערכת מגיבה למספר התקני USB. נתחיל בחיבור כרטיס זיכרון USB בגודל 512 MB. תוכל להשתמש בהתקני אחסון דומים. נשתמש לראשונה ב-dmesg כדי לראות מה קורה ואיך המערכת מגיבה להתקן.
| שים לב: dmesg לרוב נותנות הרבה פלט לפני שהיא מגיעה למידע שאנו צריכים, מכיוון שזה קורא את חוצץ טבעת הקרנל, שזה כולל גם את כל ההודעות מאז אתחול המחשב. הפלט בדוגמאות הבאות מכיל רק את החלק(ים) הרלוונטיים ורווחים נוספים ביניהם כדי לעזור למידע להיות קריא. אם אתה זקוק, השתמש ב-dmesg | more או dmesg | less כדי לראות את הפלט באופן ברור יותר במערכת שלך. |
| קוד: פלט dmesg עבור כרטיס זיכרון |
(Plug in Memory Stick into available USB port and then..) # dmesg | less (ההתקן נבחר כ-USB 1.1 ומאותרת כתובת עבורו. כמו כן, מצוין איזה HCD הוא משתמש.) usb 1-1: new full speed USB device using uhci_hcd and address 2 (התקן SCSI אוטומטית נבחר) scsi0 : SCSI emulation for USB Mass Storage devices usb-storage: device found at 2 (כעת מידע ההתקן כולל מספר מודל מתקבל) usb-storage: waiting for device to settle before scanning Vendor: JetFlash Model: TS512MJF2A Rev: 1.00 Type: Direct-Access ANSI SCSI revision: 02 SCSI device sda: 1003600 512-byte hdwr sectors (514 MB) (הגנת-כתיבה היא ניסיונית בקרנל האחרונים) sda: Write Protect is off sda: Mode Sense: 0b 00 00 08 sda: assuming drive cache: write through SCSI device sda: 1003600 512-byte hdwr sectors (514 MB) /dev/scsi/host0/bus0/target0/lun0: p1 Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0 Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0 usb-storage: device scan complete (At this point, the device is generally accessible by mounting /dev/sda1) (כאשר ההתקן מנותק, המערכת פולטת הודעת בהתאם) usb 1-1: USB disconnect, address 2 |
לאחר הפעם הראשונה שההתקן מחובר ומעוגן, תוכל לגשת אליו כמו דיסק קשיח רגיל. פעולות כמו cp, mv, rm ועוד עובדים מצוין. תוכל גם ליצור מערכת קבצים על כרטיס הזיכרון.
| קוד: גישה לכרטיס זיכרון |
# mount /dev/sda1 /mnt/usb # df -h Filesystem Size Used Avail Use% Mounted on /dev/hda8 9.4G 7.5G 1.9G 80% / /dev/hda9 11G 8.1G 2.4G 78% /usr none 189M 0 189M 0% /dev/shm /dev/sda1 490M 34M 457M 7% /mnt/usb |
| שים לב: ניתן לגשת למצלמות דיגיטליות באותה דרך כמו כרטיסי זיכרון. יש לי ניקון קולפיס 5200 וזוהי הדרך שאני ניגש אליה. מצלמות בימים אלו בד"כ בעלות שני מצבים להעברת תמונות; התקן אחסון USB ו-PTP (שזהו Picture Transfer Protocol; פרוטוקול העברת קבצים). המצלמה מכוונת למצב אחסון USB ולפיכך היא עובדת כמו כרטיס זיכרון בגלל שזה לא הוסבר בפרטים על זה. בבקשה שים לב שזה לא עלול לעבוד בכל המקרים עם כל המצלמות הדיגיטליות. |
כיצד עכבר USB יופיע במקרה שיש לך אחד? זה יוצג כהתקן HID.
| קוד: עכבר USB אופטי |
# dmesg |
פקודה מגניבה אחרת שתוכל להשתמש כדי לראות את מצבן של יציאות ה-USB שלך היא lsusb. היא חלק מהחבילה sys-apps/usbutils והיא תוסבר בפרק הבא.
[עריכה] USB בסביבת העבודה
[עריכה] כלים מגניבים
עד עתה ראינו כמה תמיכה קיימת בצד קרנל/מערכת עבור USB ב-Linux. עכשיו נקח צעד לתוך התמיכה שמסופקת ע"י ג'נטו עבור USB בסביבת המשתמש.
אחד הכלים השימושיים ביותר שישנם הוא lsusb. זה יוצר פלט עבור התקני ה-usb שמחוברים למערכת. התקן זאת בקלילות.
| קוד: התקנת usbutils |
# emerge usbutils |
ברגע שזה יותקן תוכל להריץ lsusb כדי לקבל מידע על התקני ה-USB שמחוברים למחשב.
| שים לב: עליך להיות מחובר כמשתמש מנהל (root) ברוב המקרים כדי להריץ lsusb. |
| אזהרה: lsusb קורא את המידע של התקני ה-USB מהנתיב proc/bus/usb/. אם לא אפשרת זאת בקרנל, רוב הסיכויים ש-lsusb עלול לא לעבוד בכלל. ודא בבקשה שאפשרת תמיכה במערכת קבצים proc/ בקרנל וש-usbfs מעוגן בנתיב proc/bus/usb/ (שאמור לקרות אוטומטית). |
| קוד: lsusb בעבודה |
(זהו כרטיס זיכרון 512 MB של Transcend) Bus 001 Device 003: ID 0c76:0005 JMTek, LLC. USBdisk (זהו עכבר אופטי) Bus 001 Device 002: ID 046d:c00e Logitech, Inc. Optical Mouse (זהו שורש ההאב (root hub)) Bus 001 Device 001: ID 0000:0000 |
אם אתה אחד מאלה שחובב מידע רב, יש בפניך האפשרות להריץ lsusb -v. נסה זאת וצפה בכמות המידע שזה פולט. אופציה אחרת היא ש-lsusb פולט את היררכיית USB הפיזית כעץ וזה הופך זאת קל להבנה את מפת ההתקנים המדויקת. הפקודה היא lsusb -t. לדוגמא,
| קוד: lsusb מראה היררכיית USB |
# lsusb -t Bus# 1 `-Dev# 1 Vendor 0x0000 Product 0x0000 |-Dev# 2 Vendor 0x046d Product 0xc00e `-Dev# 3 Vendor 0x0c76 Product 0x0005 |
תוכל בקלות לתאם את הפלטים של lsusb ו-lsusb -t, שעוזרים לנטר בעיות (debugging) ולהבין כיצד USB עובד.
[עריכה] חיבור חם או קר??
ג'נטו משתמש בשתי חבילות, sys-apps/coldplug ו-sys-apps/hotplug כדי לעשות קסמים עבור התקני חיבור חם. כמו כל קסם, ישנו הגיון פשוט גם מאחורי זה. נצטרך עכשיו לראות מה זה בדיוק, ובתקווה, בתהליך זה אנו נוכל להבין תאומים אלו יותר טוב.
הקושחה (firmware) יכולה להיות מוגדרת כתוכנה על צד החומרה שנטענת ומורצת, אבל לא יכולה להתעדכן בקלות. להתקנים רבים יש קושחה בתוכם כדי לוודא שהם עובדים טוב וקושחות רבות מכילות קוד שהוא קריטי לוודא שביצועי החומרה עובדים כצפוי. הקושחה קיימת בהתקני מחשב רבים, משבבי ROM ועד מרכז הליבה של USB וכרטיסי PCMCIA. כאשר התקן מתחבר, הקושחה (שקרוב לוודאי, במקרים מסוימים, הינה הדרייבר גם כן) נקרא ונטען לזיכרון ולאחר מכן המערכת יכולה להשתמש בהתקן. כ כדי לקצר בדברים, ג'נטו משתמשת ב-sys-apps/hotplug כדי לשלוט אל צד הקושחה של התקני חיבור חם. sys-apps/hotplug ישתמש בקושחה הנדרשת כדי שההתקן יהפוך לשמיש. הקושחה אמורה לעלות לספריה lib/firmware ולהיבחר משם. ובפשטות, האימרג' (emerge)הרגיל יעשה זאת:
| קוד: התקנת hotplug |
# emerge hotplug |
עכשיו השאלה המתבקשת תהיה מה זה לעזאזל coldplug ולמה צריך אותו? sys-apps/coldplug עושה מה ש-hotplug עושה, אבל הוא עושה זאת עבור התקני חיבור חם שמחוברים כבר בזמן אתחול המערכת. דוגמא טובה לכך תהיה כרטיס רשת USB. קודם לכן, hotplug היתה חבילה שאחראית לשלוט על שתיהן, אבל אח"כ היא פוצלה ל-hotplug ו-coldplug, עם coldplug הכל עובד כשורה. התקן זאת, אם יש לך התקני חיבור חם שתצטרך להפעיל בזמן עליית המערכת.
| קוד: התקנת coldplug |
# emerge coldplug (ותוכל להוסיף זאת לרמת ריצת אתחול) # rc-update add coldplug boot * coldplug added to runlevel boot * rc-update complete. |
| שים לב: הסקריפט-פנים (initscript) לעיל עושה מה שסקריפט-פנים של hotplug עושה בד"כ (עבור התקני חיבור חם מחוברים כבר). הסקריפט etc/init.d/hotplug/ הנוכחי לא מבצע כלום חוץ מאשר בדיקה אם ה-CONFIG_HOTPLUG מאופשר עבור הקרנל הנוכחי. |
[עריכה] ותודות ל...
[עריכה] מקורות
מספר טוב של מסמכים מקוונים שעזרו לי בזמן כתיבת מאמר זה וישנם כמה שהם טכניים ברמה גבוהה, אבל מעניינים ביותר. חשבתי שמגיע להם קצת קרדיט, אז בואו נתחיל!
- The Official USB Website
- The USB FAQ
- Compaq's OHCI Standard
- Intel's UHCI Standard
- Intel's EHCI Standard
