Anda BISA menyebabkan kode dieksekusi dengan mengacaukan baris perintah kernel. Metode yang paling jelas adalah mengganti init dengan sesuatu yang lain. Aplikasi yang paling umum dari ini adalah untuk meluncurkan shell sangat awal dalam proses boot, biasanya karena Anda perlu memperbaiki sesuatu atau karena semuanya rusak sangat parah, misalnya:
init=/bin/bash
Perlu diingat bahwa pada titik ini dalam proses boot, sistem file semua masih terpasang hanya-baca. Selain itu, ada banyak hal yang tidak akan berfungsi dengan benar. Karena Anda tidak menjalankan init yang sebenarnya, shutdown dan reboot tidak akan berfungsi. Anda harus secara manual me-remount sistem file root read-only dan memanggil reboot -f
untuk reboot, misalnya.
Saya tidak tahu apakah Anda bisa memberikan argumen untuk bash dengan cara ini. Saya belum pernah mencoba. Secara teori, jika Anda bisa lolos -c
ke bash, Anda dapat mengatakan bahwa proses bash untuk melakukan apa saja. Tapi itu mungkin berubah menjadi argumen yang cukup panjang, dan saya tidak tahu apakah kernel akan mengizinkan hal-hal seperti itu.
Hal kedua yang bisa Anda lakukan. Anda dapat menyalin ramf awal (initramfs) ke sistem file, dan mengkonfigurasi bootloader untuk menggunakannya config.txt
. Ada beberapa cara untuk memasukkan skrip ke dalam initramfs untuk melakukan hal-hal khusus. Anda harus menyiapkan initramfs khusus untuk tujuan ini (lihat initramfs-tools (8)), jadi saya tidak yakin apakah ini solusi yang lebih baik daripada gambar kustom.
Anda dapat memasukkan skrip ke / boot (saya menertawakan saran Anda tentang mesin "biasa", tetapi ini akan menjadi bit yang dapat Anda akses dari mesin tersebut) dan mencoba untuk meluncurkannya menggunakan baris init kernel, tetapi file pada sistem file dos tidak tersedia. dieksekusi kecuali Anda membuatnya untuk seluruh sistem file.
Jika itu saya, saya akan membuat gambar khusus yang menggunakan dhcp untuk mengkonfigurasi jaringan, dan yang berisi skrip khusus yang berjalan saat boot. Script ini memeriksa file tertentu yang berfungsi sebagai flag. Jika file ada, jangan lakukan apa pun. Jika tidak, konfigurasikan hal-hal, lalu buat file flag.
Script config Anda bahkan dapat menarik yang asli dari server http. Ini berarti Anda tidak perlu membuat gambar baru jika Anda harus men-tweak sesuatu.
Itu harus menjadi solusi yang paling tidak membuat stres.
Satu kemungkinan terakhir, tetapi Anda harus melakukan ini pada mesin "non-reguler" :-) Anda dapat me-mount sistem file ext4 ke perangkat loop dan menyalin file ke sana tanpa menulis ke kartu sd terlebih dahulu. Untuk gambar Jessie Raspbian standar, itu akan menjadi seperti ini:
sudo losetup /dev/loop0 /tmp/gw.img -o 62914560
sudo mount /dev/loop0 /mnt
sudo cp /my/superduper/script.sh /mnt
sudo umount /dev/loop0
sudo fsck -f /dev/loop0 # This is optional
sudo losetup -d /dev/loop0
Saya suka melakukan fsck pada sistem file saya sebelum membuat gambar. Atur jumlah mount ke nol pada boot pertama :-)
EDIT : Setelah berbulan-bulan dan lebih banyak pengalaman. Anda ingin melihat u-boot. Ganti boot-loader dengan u-boot. Ini dapat dilakukan dari "mesin biasa". Setelah Anda memiliki boot-u di tempatnya, Anda dapat mem-boot jaringan dari mana Anda dapat dengan mudah mem-flash kartu-sd, atau secara teori Anda dapat mem-flash kartu secara langsung, meskipun saya tidak tahu seberapa sulitnya.
Pada dasarnya u-boot membawa network-boot ke Raspberry Pi, sesuatu yang tidak didukungnya sendiri.