תוכן עניינים:
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
מטרות:
- התקן שרשרת כלים והרכב מחדש של ליבה להוספת תמיכת גאדג'ט USB Ethernet CDC;
- צור מחדש את boot.img מ- Linaro לאתחול USB Ethernet CDC;
- צור שרת NFS לארח מערכת קבצי שורש;
- תצורת IP ב- DEVICE ו- HOST.
שלב 1: דרישות
תזדקק לאיטנים הבאים:
- A DragonBoard ™ 410c (בשם כאן DEVICE);
- מחשב משתמש באמצעות אובונטו 16.04.3 מעודכן (בשם HOST) עם חיבור לאינטרנט וחריץ SDCard;
- התקנה נקייה של גירסת 431 מפתחי Linaro - קישור: Snapshot Linaro Debian v431
- צג HDMI;
- מקלדת USB;
- כרטיס SD בנפח 8 ג'יגה -בתים;
- כבל USB, uUSB USB לחיבור ה- DEVICE on HOST.
שלב 2: הגדרת מארח לבניית ליבה ובניית ליבה ב- HOST
ראשית, ניצור את כל הספריות לפני כן כדי להמשיך. לכן:
$ cd ~
$ mkdir db410 remoteroot $ cd db410 remoteroot $ mkdir כלי עבודה $ mkdir db410c-מודולים
למרבה הצער, ליבת לינוקס המשמשת את לינרו (גירסה 431) אין תמיכה בגאדג'ט USB Ethernet, בשל כך, יש לבנות מחדש את ליבת לינוקס עבור גירסה ספציפית זו. הורד את כלי העבודה של Linaro לבניית ופריסת ליבת לינוקס ב- Dragonboard410c ממכונת המארחים x86.
$ wget
$ tar -xf gcc-*-x86_64_aarch64-linux-gnu.tar.xz -C./toolchain --strip-רכיבים = 1
כעת התקן חבילות הנדרשות לבניית הגרעין:
$ sudo apt update && sudo apt-get install git build-essential abootimg kernel-package fakeroot libncurses5-dev libssl-dev ccache
קבל מאגר Linux Kernel שיבוט של צוות נחיתה של Qualcomm Linux:
שיבוט $ git
kernel $ cd $ git checkout origin/release/qcomlt-4.14 -b my-custom-4.14
כעת, הגדר משתני סביבת הידור:
$ ייצוא ARCH = arm64
$ ייצוא CROSS_COMPILE = $ (pwd) /../ toolchain/bin/aarch64-linux-gnu-
בשלב זה, עלינו להוסיף את המודולים ל- CDC USB Ethernet בגרעין. עשיתי את זה בעבר ותוכל להשיג את זה בסוף השלב הזה. הסרתי כמה itens אבל זה עובד.
לפני ההרכבה, אנא תקן באג ליבה לנהגים/mmc/host/sdhci-msm.c ושינה את המבנה בשורה 1150 ל:
static const struct sdhci_ops sdhci_msm_ops = {
.reset = sdhci_reset,.set_clock = sdhci_msm_set_clock,.get_min_clock = sdhci_msm_get_min_clock,.get_max_clock = sdhci_msm_get_max_clock,.set_bus_width = sdhci_set_bus_width,.set_uhs_signaling = sdhci_msm_set_uhs_signaling,.voltage_switch = sdhci_msm_voltage_switch, #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS.write_w = sdhci_msm_write_w, #endif};
ביטול הדחיסה של configfile.zip, העתק קובץ.config לספריית הקרנל, בנה גרעין, מודולים והתקן מודולים בספרייה:
$ make -j $ (nproc) Image.gz dtbs
מודולים של $ make -j $ (nproc) $ make modules_install INSTALL_MOD_PATH =../db410c -modules
הפניה: תיעוד לוחות 96
שלב 3: בנה מחדש את Boot.img ב- HOST
בשלב זה, עלינו לפתוח את התמונה initrd, לשים את המודולים שנבנו בתוך התמונה, להגדיר את המערכת כדי להפעיל את המודולים ולבנות מחדש initrd.img עם שורת פקודה חדשה של kernel לאתחול מערכת קבצי שורש מרחוק.
אז ראשית, עלינו להוריד initrd.img מאתר linaro:
$ CD..
$ mkdir inird_nfs $ cd initrd_nfs $ wget -O ramdisk.img
כעת, לאחר ההורדה, פתח את הדחיסה וחלץ את initrd:
$ zcat ramdisk.img | cpio -idmv
בספרייה זו, יש לנו את מערכת הקבצים הבסיסית המשמשת את הגרעין באתחול, לכן אנו מגדירים כאן מודולי USB Ethernet CDC ופרמטרים מרוחקים של NFS כמו שרת NFS ו- Ethernet (usb) כאן.
כעת, בואו להגדיר כמה קבצים:
conf/initramfs.conf:
מודולים = רובם
BUSYBOX = auto COMPRESS = gzip DEVICE = usb0 NFSROOT = RUNSIZE אוטומטי = 10%
צור את ה- init-premount של הספרייה בסקריפטים של הספרייה/
סקריפטים של $ mkdir/init-premount
והוסף את הקבצים לספרייה שנוצרה זה עתה:
להזמין
/scripts/init-premount/usb "$@"
[-e /conf/param.conf] &&. /conf/param.conf
יו אס בי
#!/bin/sh
PREREQ = "" prereqs () {echo "$ PREREQ"} מקרה $ 1 ב- # get דרישות מוקדמות prereqs) prereqs יציאה 0;; esac modprobe usb_f_ecm modprobe libcomposite modprobe usb_f_rndis modprobe g_ether
אל תשכח להשתמש ב- chmod בקובץ USB כדי להפוך אותו להפעלה:
$ chmod +x scripts/init-premount/usb
כעת, העתק את כל הספרייה עם המודולים ממודולי db410c (שלב 2) ל- lib/modules ב initrd:
$ cp -R../db410-modules/lib usr/
הסר את כל הקבצים ב- lib/modules/4.14.96-xxxx-dirty מלבד כל מודול הקבצים.* ורשימת הקבצים הזו:
kernel/drivers/usb/gadget/legacy/g_ether.ko
kernel/drivers/usb/gadget/legacy/g_mass_storage.ko kernel/drivers/usb/gadget/legacy/g_cdc.ko kernel/drivers/usb/gadget/legacy/g_serial.ko kernel/drivers/usb/gadget/function/usb_f_mass_storage.ko kernel/drivers/usb/gadget/function/usb_f_acm.ko kernel/drivers/usb/gadget/function/u_ether.ko kernel/drivers/usb/gadget/function/usb_f_obex.ko kernel/drivers/usb/gadget/function /usb_f_serial.ko kernel/drivers/usb/gadget/function/usb_f_ecm.ko kernel/drivers/usb/gadget/function/usb_f_rndis.ko kernel/drivers/usb/gadget/function/u_serial.ko kernel/drivers/usb/gadget /function/usb_f_fs.ko kernel/drivers/usb/gadget/function/usb_f_ecm_subset.ko kernel/drivers/usb/gadget/libcomposite.ko
קבצים אלה הם כל המודולים הדרושים להפעלת USB Ethernet CDC.
לבסוף לארוז מחדש ולדחס את התמונה initrd:
$ למצוא. | cpio -o -H newc | gzip -9>../kernel/initrd_nfs.img
לפחות, יש לארוז את תמונת הגרעין וקובץ DTB לתמונת אתחול של אנדרואיד. ניתן ליצור תמונה כזו בעזרת כלי abootimg.
כנסו לספריית הגרעין והשתמשו בפקודה שלהלן כדי לבנות תמונה ולהוסיף DTB בתמונת הגרעין הדחוסה:
$ cd../kernel
$ cat arch/$ ARCH/boot/Image.gz arch/$ ARCH/boot/dts/qcom/apq8016-sbc.dtb> Image.gz+dtb
ולבסוף, צור את תמונת האתחול (כאן השורשים שלנו ממוקמים מחיצה מרוחקת ב- 10.42.0.1)
abootimg -צור אתחול -db410c.img -k Image.gz+dtb -r initrd_nfs.img -c pagesize = 2048
-c kerneladdr = 0x80008000 -c ramdiskaddr = 0x81000000 -c cmdline = "root =/dev/nfs nfsroot = 10.42.0.1:/srv/nfs/rootfs ip = 10.42.0.2: 10.42.0.1: 10.42.0.1: 255.255.255.0: db410c: usb0: off rw rootwait console = tty0 console = ttyMSM0, 115200n8"
הפניות:
- https://access.redhat.com/solutions/24029
- 96 תיעוד לוחות
שלב 4: יצירת מערכת קבצי שורש ב- HOST
כעת, קיבלנו תמונת אתחול חדשה לעדכון דרגוןבורד 410c. אך אנו זקוקים למערכת קבצי שורש בשרת המרוחק כדי לאתחל מודולים, שירותים ויישומים. בשלב זה נבנה ספרייה משותפת במארח לשמירת כל הנתונים הללו. בדרך זו, בואו נוריד מערכת קבצים של rootfs מאתר linaro עם אותה גירסה המשמשת ב- initrd. אז, חזור לספרייה אחת והורד את תמונת ה- rootfs של לינארו-מפתחים בגרסה 431.
$ CD..
$ wget
בטל את הדחיסה של הקובץ הזה
$ unzip dragonboard-410c-sdcard-developer-buster-431.zip
בעזרת קובץ זה, בואו נכתוב את כל התמונה בכרטיס sd כדי לגשת לכל המחיצות ולהעתיק קבצי rootfs. לכן, וודא כי הנתונים מ- uSDCard מגובים מכיוון שהכל ב- SDCard יאבד.
כדי למצוא את שם מכשיר ה- SDCard שלך, הסר את כרטיס ה- SDC והפעל את הפקודה הבאה:
$ lsblk
שמור בראשך את כל שמות הדיסקים המוכרים. כעת הכנס את כרטיס ה- SDCard, המתן רגע והפעל שוב את הפקודה:
$ lsblk
שימו לב לדיסק החדש שזוהה לאחרונה. זה יהיה כרטיס ה- SDC שלך. זכור את שמך ושנה את הפרמטר "of =" לשם מכשיר ה- SDCard שלך והקפד להשתמש בשם המכשיר ללא המחיצה, למשל: /dev /mmcblk0
$ sudo dd if = dragonboard-410c-sdcard-developer-buster-431.img of =/dev/XXX bs = 4M oflag = status sync = התקדמות
הערות:
- הפקודה הזו תיקח זמן מה לביצוע. היו סבלניים והימנעו מהתעסקות עם הטרמינל עד לסיום התהליך.
- ברגע שכרטיס ה- SD מסתיים להבהב, הסר אותו מהמחשב המארח.
הפניה: תיעוד של 96 לוחות
שלב 5: יצירת NFS שרת ב- HOST והעתקת קבצים
בנקודה זו, יש לנו תמונת אתחול להבהב לתוך dragonboard 410c וכרטיס SD עם מערכת קבצים rootfs עבור המודולים, השירותים והיישומים שלנו. השלב הבא הוא ליצור ספרייה מרוחקת לחיבור ה- USB Ethernet DEVICE toguther עם מערכת הקבצים HOST rootfs. ניתן לעשות זאת באמצעות חבילה מאובונטו בשם nfs-kernel-server.
חבילה זו מתקינה שירות NFS באובונטו המאפשר לשתף כמה ספריות עבור התקנים מסוימים ברשת, אנו יכולים להגדיר איזו ספרייה תשמש עבור כל מכשיר באמצעות ה- IP שלך.
אז בואו להתקין את החבילה ולהגדיר אותה.
$ sudo apt-get להתקין nfs-kernel-server
שירות NFS מתחיל אוטומטית. כדי לשלוט בשירותי NFS השתמש:
$ sudo service nfs-kernel-server restart // כדי להפעיל מחדש, או השתמש ב'עצור 'או' התחל 'לפי הצורך.
כדי לבדוק את סטטוס שירות NFS משורת הפקודה השתמש:
סטטוס $ sudo nfs-kernel-server
nfsd פועל // השירות פועל nfsd אינו פועל // השירות פועל
כעת, בואו ניצור ספרייה עליונה /srv /nfs, וליצור ספריית משנה תחת כל מערכת קבצי שורש רכוב NFS הנדרשת. כאן אנו כוללים מערכת קבצי שורש משותפת לשמירה על מערכת הקבצים השורשית שלנו:
$ sudo mkdir -p /srv /nfs
$ sudo mkdir -p/srv/nfs/rootfs
כעת, שרת NFS דורש /etc /exports להיות מוגדר כהלכה, כדי לשלוט בגישה לכל ספריית מערכת קבצים של NFS למארחים ספציפיים. במקרה זה המארחים מזוהים על ידי כתובת ה- IP שלהם. אז, עבור כל מערכת קבצי שורש שנוצרת, הוסף את שורת בקרת הייצוא ל /etc /exports, והתאם את כתובת ה- IP המקומית שלך ואת ערכת שמות הספריות במידת הצורך. במדריך זה אנו תמיד משתמשים בזה:
/srv/nfs/rootfs 10.42.0.2 (rw, סנכרון, no_root_squash, no_subtree_check)
הכנס שוב את כרטיס ה- SDC שלך, הר אותו והעתק את כל מערכת הקבצים של rootfs אל/srv/nfs/rootfs, הפעל מחדש את שירות NFS כדי לעדכן את הספרייה באמצעות קבצים חדשים שהועתקו.
בנוסף, עלינו להעתיק את קבצי המודולים החדשים למערכת הקבצים של rootfs כי ריכזנו את הגרעין בשלב 2. לכן, העתק את כל הספריות ב- ~/db410c-modules/to/srv/nfs/rootfs.
$ sudo cp -R ~/db410c -modules/*/srv/nfs/rootfs/
ודא שספריות אלה הופכות לגלויות על ידי שירות NFS. אוֹ:
$ sudo exportfs -a
הפניה: מערכת קבצי שורש TFTP/NFS
שלב 6: עדכון תמונת האתחול של Dragonboard 410c והגדרת ממשקי רשת
עשינו מוקדם את כל השלבים ליישום מערכת קבצים מרוחקת של rootfs, כעת עלינו לעדכן את תמונת האתחול בתוך דרגוןבורד 410c, לשם כך, חבר את כבל ה- USB שלך למחשב ולמחבר uUSB של דרקונבורד. אז וודא שה- fastboot מוגדר במחשב המארח, אם לא התקן באמצעות:
$ sudo apt להתקין fastboot
כעת כדי לעדכן את התמונה, הפעל את דרקונבורד למצב אתחול מהיר לפי השלבים הבאים:
- לחץ והחזק את לחצן Vol (-) ב- DragonBoard 410c, זהו כפתור S4. עדיין אין להפעיל את DragonBoard ™ 410c
- בעת החזקת לחצן Vol (-), הפעל את DragonBoard 410c על ידי חיבורו לחשמל
- לאחר חיבור DragonBoard 410c לחשמל, שחרר את החזקת לחצן Vol (-).
- המתן כ- 20 שניות.
- הלוח צריך לאתחל למצב אתחול מהיר.
מחלון מסוף מחשב המארח המחובר, הפעל את הפקודות הבאות:
$ sudo התקני bootboot
בדרך כלל זה יופיע להלן
מגף מהיר de82318
בשלב זה עליך להיות מחובר ל- DragonBoard 410c שלך באמצעות כבל USB ל- microUSB. DragonBoard 410c שלך צריך להיות מופעל למצב bootboot ומוכן להבהב עם התמונות המתאימות. בואו לעדכן את תמונת האתחול עם תמונת האתחול שלנו:
$ sudo fastboot flash boot ~/db410remoteroot/kernel/initrd_nfs.img
והפעל מחדש את הלוח
אתחול מחדש של $ sudo fastboot
כעת, HOST שלך יזהה ממשק חדש בשם usb0, אך עדיין אין לו IP. לכן, הוסף IP סטטי לממשק זה באמצעות:
$ sudo ifconfig usb0 10.42.0.1 netmask 255.255.255.0 למעלה
או הזן ב- "תצורה" ב- HOST, בפריט "רשת", והגדר USB Ethernet כתובת IP סטטית לממשק זה.
כעת, הפעל מחדש את דרקונבורד וודא את אתחול המערכת, ונסה להתחבר באמצעות ssh:
$ ssh [email protected]
הפניות:
- תיעוד של 96 לוחות
- HowtoForge - פריט 6