ข้อความเริ่มต้นระบบ Android สำหรับการดีบั๊กหรือไม่


23

ฉันพยายามคิดว่า Android (เช่น Galaxy Nexus, Nexus S และ / หรือ Motorola Xoom) มาพร้อมกับความสามารถบางอย่างในการสร้างบันทึก "boot-up" (ชนิดของหน้าจอ boot-up Linux) มันจะมีประโยชน์อย่างมากในการค้นหาว่าโทรศัพท์ของคุณเข้าสู่ขั้นตอนการบู๊ตได้ไกลแค่ไหนก่อนที่จะเกิดปัญหา (เช่น bootloader ขั้นแรก, bootloader หลักจากนั้นโหลดเคอร์เนล ฯลฯ ) ไม่มีใครรู้วิธีเปิดใช้งานโทรศัพท์เพื่อคายไฟล์บันทึกนี้หรือเปิดใช้งานโหมด "บูต" verbose "(และพิมพ์ข้อความจริงไปยังเทอร์มินัลของคอมพิวเตอร์ Linux ที่คุณเชื่อมต่อกับโทรศัพท์)?

โทรศัพท์ของฉันติดอยู่ใน "boot-loop" กับ build ที่แก้ไขปัจจุบันของฉันและฉันต้องการดีบักถ้าเป็นไปได้

หรือใครก็ตามที่รู้ว่ามีทรัพยากรหรือบทเรียนที่มีประโยชน์ใด ๆ ที่อธิบายวิธีการ "แฮ็ค" โทรศัพท์อย่างง่าย ๆ เพื่อทำสิ่งนี้ (ไม่ยุ่งกับฮาร์ดแวร์) หรือฟอรัมใดที่อาจมีคำถามของฉันถาม แต่อยู่ในรูปแบบที่คลุมเครือมากกว่า

นี่เป็นปัญหาที่น่าผิดหวังเมื่อเร็ว ๆ นี้ดังนั้นความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก


ฉันรู้ว่ามันเริ่มเขียนลงใน logcat เร็วมาก แต่ก็จะถูกล้างเมื่อรีบูต มันควรเริ่มเขียนทันทีที่มันแสดง "ภาพเคลื่อนไหวการบูต" (หรืออาจจะเร็วกว่านั้นสักเล็กน้อย)
Ryan Conrad

2
คุณจะเข้าถึง logcat โดยไม่มี "adb" ได้อย่างไร Adb ใช้งานได้เฉพาะเมื่อโทรศัพท์อยู่ในสถานะเสถียรซึ่งขัดแย้งกับประเด็นทั้งหมดที่ฉันเดาว่าทำไม logcat มีอยู่ (ใครจะสนใจถ้าโทรศัพท์บูทเครื่องสำเร็จไม่ต้องใช้เครื่องมือมาก)
9exceptionThrower9

adb เป็นหนึ่งในบริการแรกที่เริ่มต้น หากคุณเห็นภาพเคลื่อนไหวการบูตแสดงว่า adb กำลังทำงานอยู่ adb ยังใช้งานได้เมื่อคุณอยู่ในโหมดการกู้คืน
Ryan Conrad

ฉันไม่แน่ใจว่าฉันเห็นภาพเคลื่อนไหวการบูตที่คุณกำลังพูดถึง หลังจากสัญลักษณ์ "ชาร์จ" แบตเตอรี่โทรศัพท์ค้างที่ splashscreen โดยมี "Google" เป็นสีขาวก่อนที่จะเกิดปัญหา ไม่มี splashscreen "Android" หลังจากนั้นหรือภาพเคลื่อนไหวการบู๊ตใด ๆ ดังนั้นฉันไม่คิดว่า ADB ยังทำงานได้ ...
9exceptionThrower9

คำตอบ:


14

มีสองวิธีในการทำสิ่งนี้:

  • cat /proc/last_kmsg > /sdcard/last_kernel_message_log.txt
  • dmesg > /sdcard/kernel_boot_log.txt
  • เสียบสายเคเบิล USB พร้อมกับปิดสมาร์ทโฟน จากนั้นออกคำสั่งadb logcatจาก Windows cmd หรือเทอร์มินัล Linux ของคุณมันจะรอให้อุปกรณ์มาออนไลน์ตอนนี้เปิดสมาร์ทโฟน logcat ควรเริ่มเลื่อนออก

เนื่องจากคุณแสดงความสนใจในการค้นหาว่าโทรศัพท์ของคุณเข้าสู่ขั้นตอนการบู๊ตได้ไกลแค่ไหนก่อนที่จะเกิดปัญหาวิธีการเหล่านั้นจะช่วยได้ สิ่งคือคุณต้องรวดเร็วในการคว้าบันทึกของเคอร์เนล (สองวิธีแรกที่แสดงด้านบน)

สิ่งที่ฉันจะทำคือนี้บนกล่อง Arch Linux ของฉันสองหน้าต่างเทอร์มินัลหนึ่งหน้าต่างสำหรับอีกบานหนึ่งadb logcatเพื่อคว้าบันทึก logcat นาทีเริ่มเลื่อนออก!

แก้ไข:

ระวังให้ดีมีความแตกต่างกับการใช้adbและfastboot!

fastbootการทำงานแตกต่างกันมันจะใช้เฉพาะสำหรับภาพกระพริบเป็นพาร์ทิชันที่ระบุและมีความผูกพันกับกระบวนการบูตโหลดเดอร์คือมันสามารถเข้าใจกลไกบูตโหลดเดอร์ นอกจากนี้ยังกำหนดให้:

  • ภายใต้ Windows สิทธิ์ 'ผู้ดูแลระบบ' เพื่อเรียกใช้งาน
  • ภายใต้ Linux สิทธิ์ 'รูท'

เหตุผลที่ต้องใช้เพราะมันผ่านอินพุต / เอาท์พุตบางอย่างของฮาร์ดแวร์และดังนั้นจึงไม่ "พูดคุย" ในadbโปรโตคอล แต่เป็น "พูดคุย" โดยตรงกับบูตโหลดเดอร์ สิ่งที่ไม่สามารถทำได้ในฐานะผู้ใช้ปกติ fastbootนี่คือวิธีใช้สำหรับการใช้งานของ

$ sudo fastboot
usage: fastboot [ <option> ] <command>

commands:
  update <filename>                        reflash device from update.zip
  flashall                                 flash boot + recovery + system
  flash <partition> [ <filename> ]         write a file to a flash partition
  erase <partition>                        erase a flash partition
  getvar <variable>                        display a bootloader variable
  boot <kernel> [ <ramdisk> ]              download and boot kernel
  flash:raw boot <kernel> [ <ramdisk> ]    create bootimage and flash it
  devices                                  list all connected devices
  continue                                 continue with autoboot
  reboot                                   reboot device normally
  reboot-bootloader                        reboot device into bootloader
  help                                     show this help message

options:
  -w                                       erase userdata and cache
  -s <serial number>                       specify device serial number
  -p <product>                             specify product name
  -c <cmdline>                             override kernel commandline
  -i <vendor id>                           specify a custom USB vendor id
  -b <base_addr>                           specify a custom kernel base address
  -n <page size>                           specify the nand page size. default: 2048

การใช้งานที่fastbootเป็นที่รู้จักกันดีคือใช้สำหรับการกะพริบเช่นการแฟลชอิมเมจการกู้คืน: sudo fastboot flash recovery recovery.imgอีกอันคือการแฟลชอิมเมจดิบsudo fastboot flash system system.imgโดยตรง สำหรับกรณีเพิ่มเติมของการพัฒนาเคอร์เนลการใช้สิ่งfastboot boot new_kernelนี้เป็นการดาวน์โหลดเคอร์เนลใหม่และการบูตแบบชั่วคราวโดยไม่ต้องแตะการบู๊ตของบูทโหลดเดอร์เอง

นอกจากนี้ยังมีข้อ จำกัด เกี่ยวกับขนาดของภาพดิบที่ต้องใช้แฟลชเมื่อฉันพูดภาพดิบฉันหมายถึงไฟล์ที่มี.imgนามสกุลภาพต้องไม่เกิน 128Mb ( ฉันค้นพบสิ่งนี้เมื่อพัฒนา ics4blade หลังจากสร้างเสร็จแล้ว system.img คือ 162Mb และฉันพยายามแฟลช แต่ fastboot ปฏิเสธ! เพื่อหลีกเลี่ยงข้อ จำกัด ต้องสร้างไฟล์ zip ที่สามารถ flashable CWM เพื่อทำสิ่งนั้นและไปรอบ ๆ มัน! )

ปฏิบัติด้วยความระมัดระวังและตรวจสอบให้แน่ใจว่าพาร์ติชันนั้นถูกต้องและตรวจสอบอีกครั้งและตรวจสอบอีกครั้งหากจำเป็นเดินออกจากเครื่องคอมพิวเตอร์หยุดพักกลับมาอีกครั้งและตรวจสอบอีกครั้ง แฟลชไฟล์ที่ไม่ถูกต้องลงในพาร์ทิชันผิด ... ดียักไหล่


3
นี่เป็นความคิดที่ดี แต่ปัญหาอย่างหนึ่ง .... adb ใช้งานได้ก็ต่อเมื่อ adb daemon สามารถตรวจจับอุปกรณ์ได้ หากโทรศัพท์ยังไม่สามารถบู๊ตได้สำเร็จ adb จะไม่ทำงาน ดังนั้น "boot-loop" เมื่อคุณต้องการ logcat ส่วนใหญ่จะไม่ทำงานและมันก็ไม่ได้เป็นในขณะที่ฉันลอง สิ่งเดียวที่คุณสามารถเข้าถึงคำสั่งที่ชาญฉลาดซึ่งไม่สนใจว่าโทรศัพท์ได้ทำการบูทเรียบร้อยแล้วคือ "fastboot" ในกรณีนี้มีทางเลือกอะไร?
9exceptionThrower9

@ 9exceptionThrower9 ได้แก้ไขคำตอบของฉันเพื่อรวมแนวคิดของ fastboot และเพื่อตอบในความคิดเห็นของคุณ fastboot จะไม่ทำงาน :)
t0mm13b

ทางเลือกเดียวที่ฉันนึกได้คือการลบ fastboot cacheและdataพาร์ติชั่น - ฉันไม่รับผิดชอบอะไรเลยถ้าคุณทำต่อไป! และลองแฟลช ROM อีกครั้งผ่าน CWM ยิ่งไปกว่านั้นลืมfastbootและใช้ CWM เพื่อล้างทั้งแคชและข้อมูลดูเหมือนว่า bootloop เกิดจากการแคช borked หรือ data ...
t0mm13b

เป็นเรื่องที่น่าสนใจสิ่งที่ว่าที่คุณทำจะได้ไป bootloop - นั่นเป็นคำถามที่สำคัญและต้องการที่จะรู้ว่าสิ่งที่ทำตามขั้นตอนที่คุณเอา?
t0mm13b

ฉันปรับเปลี่ยนเคอร์เนล Android (maguro) สำหรับ Galaxy Nexus โดยเฉพาะอย่างยิ่งไฟล์ "socket.h" เพื่อแทนที่การลงทะเบียน INET กับโครงการวิจัยของทีม FINS (ซึ่งดึงโพรโทคอลอินเทอร์เน็ตออกสู่ผู้ใช้สำหรับนักวิจัยเครือข่าย) หลังจากแก้ไขไฟล์นี้ (เพียงไม่กี่บรรทัด) ฉันทำการคอมไพล์เคอร์เนลอีกครั้งสำเร็จแทรกเคอร์เนลนี้ลงในแผนผังต้นไม้ของ maguro Android สร้างอิมเมจระบบ Android ขึ้นใหม่จากนั้นจึงทำการกู้ไฟล์บูตระบบและ userdata.img ใหม่ โทรศัพท์ ...
9exceptionThrower9

0

คุณสามารถใช้ LiveBoot มันอยู่ใน Google Play Store มันจะทำสิ่งที่คุณถาม


ถ้าฉันได้ bootloop ล่ะ มีวิธีทำด้วยสาย USB หรือไม่?
beppe9000
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.