เป็นไปได้ไหมที่จะรับข้อมูลทรีของอุปกรณ์โดยใช้ / sys ของเคอร์เนลที่กำลังรันอยู่?


20

โดยทั่วไปสำหรับระบบแขนอุปกรณ์ต้นไม้จะจัดหาข้อมูลฮาร์ดแวร์ให้กับเคอร์เนล (Linux) แผนผังอุปกรณ์เหล่านี้มีอยู่ในรูปแบบไฟล์ dts (แหล่งอุปกรณ์ต้นไม้) ที่รวบรวมและโหลดลงในเคอร์เนล ปัญหาคือฉันไม่สามารถเข้าถึงdtsไฟล์ดังกล่าวไม่ได้แม้แต่dtbไฟล์

ฉันสามารถเข้าถึง/sysและ/procบนเครื่องและฉันต้องการถามว่าจะอนุญาตให้ "เดาค่าที่ถูกต้อง" ที่จะใช้ใน dts หรือไม่?

คำตอบที่เป็นไปได้ยังสามารถเน้นเพิ่มเติมได้หากคำตอบสำหรับคำถามนี้ยังขึ้นอยู่กับว่าส่วนต่อประสานอุปกรณ์ถูกใช้ในสถานที่แรก (เช่น a dtbถูกสร้างขึ้นและมอบให้เคอร์เนล) แทนการแฮ็คเพิ่มเติม " และแก้ไขเคอร์เนลเพื่อแก้ปัญหาข้อมูลอุปกรณ์สำหรับเคอร์เนลของเราเท่านั้น "-solution?


คุณมีสิทธิ์เข้าถึงอิมเมจสำหรับบูตหรือไม่ คุณสามารถแยกแผนภูมิอุปกรณ์จากตรงนั้น ฉันสามารถช่วยได้.
phk

คำตอบ:


27

/proc/device-tree หรือ /sys/firmware/devicetree/base

ผมคิดว่าทั้งสองมีชื่อแทนน่าจะเป็นทางเลือกที่ดีขึ้นหลังจากการฝึกฝนของ/sys/firmware/devicetree/base/proc

จากนั้นคุณสามารถเข้าถึงคุณสมบัติ dts จากไฟล์:

 hexdump /sys/firmware/devicetree/base/apb-pclk/clock-frequency

รูปแบบเอาต์พุตสำหรับจำนวนเต็มเป็นไบนารีดังนั้นจึงhexdumpจำเป็นต้องมี

dtc -I fs

รับแผนผังอุปกรณ์เต็มรูปแบบจากระบบไฟล์:

sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base

ส่งออก dts เพื่อ stdout

ดูเพิ่มเติม: วิธีการแสดงรายการ Device Tree ของเคอร์เนล Unix & Linux Stack Exchange

dtc ใน Buildroot

Buildroot มีการกำหนดค่าBR2_PACKAGE_DTC=yเพื่อใส่dtcภายในระบบไฟล์รูท

QEMU -machine dumpdtb

หากคุณใช้งาน Linux ภายใน QEMU, QEMU จะสร้าง DTB โดยอัตโนมัติหากคุณไม่ได้ให้ไว้อย่างชัดเจนด้วย-dtbดังนั้นจึงสามารถถ่ายโอนโดยตรงด้วย:

qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine dumpdtb=dtb.dtb

ตามที่กล่าวไว้ที่: https://lists.gnu.org/archive/html/qemu-discuss/2017-02/msg00051.html

ทดสอบกับการตั้งค่า QEMU + Buildrootบนเคอร์เนล Linux v4.19 arm64


4

ฉันไม่แน่ใจว่าฉันเข้าใจคุณถูกต้องหรือไม่

หากคุณอยู่ในระบบที่บูตโดยใช้ dtb ทรีอุปกรณ์ของคุณควรสามารถเข้าถึงได้ภายใน debugfs

คุณสามารถลองใช้เครื่องมือ dtc โดย Pantelis Antoniou ซึ่งรวมถึง fdtdump และ fdtget ที่พิมพ์ dts จาก blob

หากคุณไม่มีแผนผังอุปกรณ์เลยและไม่ได้บูตจาก dtb คุณจะต้องอ่านรหัสเครื่องด้วยตัวเองและเพิ่มคุณสมบัติและอุปกรณ์เฉพาะทั้งหมดลงใน dts ของคุณ ไม่มีทรีอุปกรณ์ "สังเคราะห์" ที่สร้างขึ้นสำหรับการบู๊ตดังกล่าว จุดเริ่มต้นจะเป็นเครื่องที่คล้ายกันหรือผู้ปกครองแล้วทำงานระบบทางของคุณโดยระบบ


ขอบคุณที่ชี้แจง มีโอกาสที่เป็นdtbอาจจะเข้าถึงได้ผ่านทางผ่าน debugfs ยังที่จะพึ่งพาCONFIG_DEBUG_FSใน.configและแม้ว่าชุดยังอยู่ในราชประสงค์เท่านั้นที่พวกเขาจริงใช้dtbจะเริ่มต้นด้วยฉันจะอ่านขวานี้หรือไม่? ดังนั้นด้วย "โชคร้าย" พวกเขาจึงไม่ใช้และใช้การเรียงเคอร์เนลโดยตรงบางชนิดติดตั้งอินเทอร์เฟซทรีของอุปกรณ์ใช่ไหม ดังนั้นนี่หมายความว่าทางเลือกสุดท้ายคือรหัสเครื่องจักรเนื่องจากพวกเขาละเมิด GPLv2 และปิดเคอร์เนลใช่ไหม
humanityANDpeace

ใช่และใช่สำหรับสองคนแรก สุดท้าย IANAL แต่ส่วนโค้งของเครื่อง / ??? / mach - ??? / board - ???. c จะมีอุปกรณ์พิเศษที่มีอยู่สำหรับเครื่องในเมล็ดที่เก่ากว่า สิ่งนี้ควรได้รับการคุ้มครองโดย GPL และต้องมีค่าธรรมเนียม ไดรเวอร์อุปกรณ์แต่ละรายการอาจถูกปิดไม่ให้มีการละเมิด
59
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.