Menonaktifkan negosiasi otomatis PHY selama proses boot Linux di Xilinx


9

Saya mencoba menginstal Linux pada papan FPGA. Rasa linux adalah petalinux untuk chip Xilinx FPGA.

Xilinx SoC saat ini memiliki prosesor Cortex A9 dan logika perangkat keras yang dapat diprogram yaitu FPGA. Saya menangkap pesan booting di terminal:

.....................U-boot time.......................partition.......................................................

[Fri Dec 27 15:18:53.108 2013] Copying Linux from SD to RAM...
[Fri Dec 27 15:18:53.129 2013] Device: SDHCI
[Fri Dec 27 15:18:53.129 2013] Manufacturer ID: 2
[Fri Dec 27 15:18:53.129 2013] OEM: 544d
[Fri Dec 27 15:18:53.129 2013] Name: SA04G 
[Fri Dec 27 15:18:53.129 2013] Tran Speed: 25000000
[Fri Dec 27 15:18:53.129 2013] Rd Block Len: 512
[Fri Dec 27 15:18:53.129 2013] SD version 1.10
[Fri Dec 27 15:18:53.129 2013] High Capacity: Yes
[Fri Dec 27 15:18:53.129 2013] Capacity: 3951034368
[Fri Dec 27 15:18:53.129 2013] Bus Width: 1-bit
[Fri Dec 27 15:18:53.129 2013] reading zImage
[Fri Dec 27 15:18:59.367 2013] 
[Fri Dec 27 15:18:59.367 2013] 2304852 bytes read
[Fri Dec 27 15:18:59.381 2013] reading devicetree.dtb
[Fri Dec 27 15:18:59.475 2013] 
[Fri Dec 27 15:18:59.475 2013] 2709 bytes read
[Fri Dec 27 15:18:59.491 2013] reading ramdisk8M.image.gz
[Fri Dec 27 15:19:06.121 2013] 
[Fri Dec 27 15:19:06.121 2013] 2501584 bytes read
[Fri Dec 27 15:19:06.144 2013] Trying to set up GEM link...
[Fri Dec 27 15:19:06.144 2013] Resetting PHY...
[Fri Dec 27 15:19:06.144 2013] 
[Fri Dec 27 15:19:06.144 2013] PHY reset complete.
[Fri Dec 27 15:19:06.144 2013] Waiting for PHY to complete auto-negotiation...
[Fri Dec 27 15:19:18.176 2013] ***Error: Auto-negotiation stalled...
[Fri Dec 27 15:19:18.176 2013] ping failed; host 10.10.70.101 is not alive

Saya secara khusus tertarik pada baris ini:

[Fri Dec 27 15:19:06.144 2013] PHY reset complete.
[Fri Dec 27 15:19:06.144 2013] Waiting for PHY to complete auto-negotiation...
[Fri Dec 27 15:19:18.176 2013] ***Error: Auto-negotiation stalled...
[Fri Dec 27 15:19:18.176 2013] ping failed; host 10.10.70.101 is not alive

Pertanyaan # 1: Saya kira baris ini untuk TCP / IP?

Seperti dapat dilihat sekitar 12 detik terbuang di sini. Masalahnya adalah saya memerlukan sistem boot cepat, dan tidak akan membutuhkan TCP / IP sama sekali di aplikasi akhir.

Linux yang saya instal sejauh ini menggunakan gambar pre-built yang disediakan oleh Xilinx. Sekarang untuk menghilangkan bagian TCP / IP (karena saya tidak membutuhkannya, dan jika saya tidak memilikinya di OS, 12 detik ini dapat disimpan - ini adalah pemahaman saya), saya berencana untuk membangun kernel Linux sendiri.

Jadi saya mengunduh kode sumber untuk PetaLinux, dengan anggapan saya harus melakukan cross compile dari sistem host saya.

Pertanyaan # 2: Tapi saya ingin tahu bagaimana saya bisa mengecualikan bagian TCP / IP dari sumber OS, sehingga ketika OS mem-boot-nya, ia tidak akan pernah melakukan rutinitas TCP / IP yang memakan waktu itu?

Pertanyaan # 3: Saya juga tidak yakin apakah pada gambar pre-built dapatkah kita memiliki opsi untuk menonaktifkan bagian TCP / IP?

Tujuan saya adalah untuk menghilangkan baris-baris ini selama proses boot:

[Fri Dec 27 15:19:06.144 2013] PHY reset complete.
[Fri Dec 27 15:19:06.144 2013] Waiting for PHY to complete auto-negotiation...
[Fri Dec 27 15:19:18.176 2013] ***Error: Auto-negotiation stalled...
[Fri Dec 27 15:19:18.176 2013] ping failed; host 10.10.70.101 is not alive

langkah 1: cari tahu sistem init apa yang sedang digunakan. langkah 2: melihat-lihat file konfigurasi.
strugee

Apakah Anda memiliki sumber kernel? Bagaimana Anda mem-boot-nya sampai sekarang? Apakah ada pohon perangkat yang terlibat?
Stark07

Pesan itu dari U-Boot, Linux belum boot pada saat itu.
Gilles 'SO- stop being evil'

Jawaban:


2

Pertanyaan 2: Saya yakin cetakan itu berasal dari uboot. Jika demikian, saya yakin Anda telah menetapkan "CONFIG_PHY_RESET" - bisakah Anda memeriksa konfigurasi uboot Anda untuk itu? Untuk menonaktifkan fitur ini, Anda mungkin harus memeriksa konfigurasi Anda, biasanya sesuatu yang mirip dengan: ./include/configs/YourBoardConfigFile.h, adalah apa yang akan digunakan uboot.

Salah satu jawaban lain dipanggil untuk menggunakan Kconfig - Saya memeriksa menuconfig uboot saya dan opsi itu tidak ada.

Jika Anda melihat file sumber uboot: ./drivers/net/4xx_enet.c , cari "CONFIG_PHY_RESET", akan muncul kode yang sedang dijalankan:

#if defined(CONFIG_PHY_RESET)
/*
 * Reset the phy, only if its the first time through
 * otherwise, just check the speeds & feeds
 */
if (hw_p->first_init == 0) {

Tak lama kemudian, Anda dapat melihat teks "Menunggu negosiasi otomatis PHY selesai", jadi ini seharusnya tepat di tempat masalah Anda (atau dekat dengannya - ada beberapa file lain yang memiliki inisialisasi yang sama tergantung pada arsitektur).

Untuk beberapa alasan, file README di sumber uboot tingkat atas memanggil CONFIG_PHY_RESET_DELAY, tetapi tidak CONFIG_PHY_RESET, jadi Anda mungkin melewatkannya di sana.

Pertanyaan 3: Jika CONFIG_PHY_RESET adalah masalahnya, maka ini harus diatur pada waktu kompilasi. Anda harus dapat mengunduh sumber uBoot Xilinx untuk papan Anda.

Saya tidak yakin mengapa pengaturan ulang diperlukan, jadi saya tidak benar-benar menjawab pertanyaan 1 dari Anda, tetapi sepertinya beberapa PHY memiliki persyaratan berbeda untuk diatur ulang saat inisialisasi dan bahkan beberapa memerlukan sejumlah penundaan.


0

Sistem itu tampaknya ingin melakukan ping ke alamat IP 10.10.70.101, mungkin karena memeriksa alamat IP-nya sendiri atau gateway-nya. Bagian ini berarti sistem dikonfigurasikan dengan antarmuka jaringan dengan alamat IP itu atau yang serupa.

Jeda terjadi karena dalam proses mengkonfigurasi IP, ia memuat driver jaringan Ethernet, yang melakukan negosiasi otomatis PHY, pada dasarnya mencoba untuk melihat apa yang terhubung dengannya. Karena tidak ada yang terhubung, waktu habis.

Anda mungkin harus mencari di mana pun distribusi Linux ini menyimpan pengaturan antarmuka jaringan. Pencarian google sepintas menunjukkan U-Boot ini memiliki variabel ipaddrper http://www.denx.de/wiki/view/DULG/UBootEnvVariables


-1

Gunakan Kconfigatau analog grafisnya untuk menonaktifkan Networking setelah kompilasi kernel. Contoh: lihat ini .


2
Tolong jangan hanya mengirim tautan, sertakan sebanyak mungkin konten yang relevan langsung di situs ini. Jika situs yang Anda tautkan hilang maka jawaban Anda menjadi tidak berharga.
slm
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.