Apakah ada distro Linux yang akan dengan mudah menjalankan "gaya tertanam" pada Raspberry Pi? [Tutup]

9

Saya memerlukan distro Linux yang akan memberi saya hal berikut:

  • Jalankan dengan Raspberry Pi
  • Dapat andal bertahan dari kehilangan daya (seperti melalui sistem file read-only)

Saya sudah bisa memburu beberapa dokumentasi tentang cara mengubah distro Linux biasa menjadi mode read-only. Saya berharap bahwa akan ada distro yang sudah dibangun yang dirancang untuk berjalan di lingkungan yang tertanam.

Saya tidak perlu banyak paket atau driver, cukup cukup agar Pi bekerja dengan USB / Ethernet. Saya tidak memerlukan antarmuka GUI atau apa pun, ini hanya akan menjalankan layanan khusus yang dibangun di C.

Adakah yang tahu distro yang cocok?

Dan Harper
sumber
Mengingat ini untuk aplikasi yang disematkan, dua hal cepat yang mungkin ingin Anda catat. Pertama, jika Anda memutuskan untuk memilih rute Linux, lihat menggunakan kernel real-time untuk memastikan sistem Anda dapat merespon dengan cukup cepat. Kedua, Anda mungkin juga ingin mengatur pengawas waktu untuk mengambil tindakan dalam hal loop / kesalahan perangkat lunak.
Terobosan
Lihat raspberrypi.stackexchange.com tapi saya pikir pertanyaan ini juga tidak umum karena ini adalah pertanyaan jenis belanja,
Kevin Panko

Jawaban:

3

Sebagian besar sistem embedded menggunakan kernel yang dibuat khusus. Salah satu alat untuk memfasilitasi itu adalah Buildroot , satu set skrip untuk membangun GNU gcc toolchain, pustaka uClibc menggantikan libc GNU (besar), kernel Linux, BusyBox dan utilitas / paket lainnya untuk sistem file root board tertanam. RaspberryPi adalah papan yang relatif baru, jadi dukungannya dalam Buildroot masih dalam pengembangan, tetapi tampaknya ada proyek , proyek lain , dan pekerjaan individu . Mungkin akan ada lebih banyak ketika manufaktur RP meningkat dan distribusi meningkat.

Menggunakan Buildroot, Anda dapat membangun kernel Linux dan root filesystem persis seperti yang Anda jelaskan dalam pertanyaan Anda. Tergantung pada kecepatan koneksi Internet Anda dan kemampuan PC pengembangan Anda, Anda mungkin memiliki biner dalam 1 hingga 4+ jam. Kelemahannya adalah bahwa binari yang dihasilkan tidak diuji atau dijamin untuk berhasil boot & dieksekusi. Konsol sistem wajib untuk men-debug urutan boot. Lihat jawaban saya untuk Bagaimana saya bisa mengakses mini-pc saya (RaspberryPi / MK802 / Mele A1000 / VIA APC) melalui ethernet / wifi tanpa memiliki Monitor? Tetapi mengingat bahwa RaspberryPi dirancang untuk tidak bisa ditutup , downside ini seharusnya tidak menjadi penghalang untuk membangun kernel dan RFS khusus Anda.

Mengenai "bertahan daya yang hilang": Pemilihan sistem file yang tepat biasanya dapat meringankan masalah ini. Lapisan perangkat MTD ditambah sistem file penjurnalan (misalnya jffs2) telah terbukti cukup kuat dari pengalaman. Untuk perlindungan yang hampir absolut, ada initramfs yang menggunakan ramfs(bukan ramdisk berukuran tetap) tanpa peralihan ke sistem file R / W.

Tambahan

Intro 30-slide pada fitur Buildroot ada di sini.
Pada akhirnya (# 27) disebutkan beberapa alat yang mirip dan alternatif untuk membangun sistem embedded.

serbuk gergaji
sumber
2

TinyCoreLinux hanya dibaca secara default (ketekunan adalah opsional): http://www.tinycorelinux.net/ports.html

avra
sumber
Tidakkah Anda melihat judul "Arm V6 Raspberry Pi" pada tautan yang saya berikan?
avra
Saya sepertinya melewatkan itu. Terpilih;)
Journeyman Geek
1

Setelah memiliki Seagate Dockstar dengan akses konsol, saya menginstal Debian memerasnya. Sebagai titik awal untuk membuatnya berjalan pada read-only root, saya menggunakan artikel 1 yang bagus ini oleh Jeff Doozan. Strategi dasar melibatkan pembuatan skrip yang, pada setiap boot, me-mount direktori-direktori yang dapat ditulis sebagai tmpfs. Saya mengutip naskah oleh Jeff 2 di sini (pujian kepada Jeff!)

#!/bin/bash
DIRS="/tmp /var/log /var/run /var/lock /var/tmp /var/lib/urandom /var/lib/dhcp /etc/network/run"
for DIR in $DIRS; do
  echo "Mounting $DIR as tmpfs"
  mount -n -t tmpfs tmpfs $DIR
  if [ -d "$DIR-saved" ]; then
    echo "Restoring $DIR-saved to $DIR"
    tar -C "$DIR-saved" -cf - ./ | tar -C "$DIR" -xpf -
  fi
done

echo "nameserver 4.2.2.1" > /var/tmp/resolv.conf
touch /var/lib/dhcp/dhcpd.leases

exec /sbin/init

Simpan baris di atas sebagai skrip yang disebut / sbin / init-ro di rootfs target Anda dan buatlah itu dapat dieksekusi.

chmod 755 /sbin/init-ro

Untuk menggunakan skrip ini saat boot-time, Anda harus menyiapkan sistem rootfs sedikit (semua dikutip dari skrip Jeff 2 (beradaptasi $ROOTdengan lokasi sebenarnya dari rootfs yang Anda pasang).

# Configure dhcp-client to write resolv.conf to /tmp instead of /etc
sed -i 's/\/etc\/resolv.conf/\/var\/tmp\/resolv.conf/' $ROOT/sbin/dhclient-script > /dev/null 2>&1
rm $ROOT/etc/resolv.conf
ln -s /var/tmp/resolv.conf $ROOT/etc/resolv.conf


# make /etc/network/run/ a symlink to /tmp/network/
rm -rf $ROOT/etc/network/run
ln -s /var/tmp/network $ROOT/etc/network/run


# Fixes from http://wiki.debian.org/ReadonlyRoot

rm $ROOT/etc/blkid.tab  > /dev/null 2>&1
ln -s /dev/null $ROOT/etc/blkid.tab

rm $ROOT/etc/mtab  > /dev/null 2>&1
ln -s /proc/mounts $ROOT/etc/mtab

rm $ROOT/etc/rcS.d/S12udev-mtab

rm -rf $ROOT/var/log/*

Setelah menyiapkan rootfs seperti di atas, Anda dapat me-mount rootfs read-only di / etc / fstab (ganti ext2 dengan sistem file yang Anda gunakan atau gunakan saja rootfs sebagai gantinya).

/dev/root  /                 ext2  noatime,ro   0 1

Akhirnya, Anda harus menambahkan yang berikut ini ke parameter kernel Anda (yaitu di /boot/cmdline.txt pada Raspi) untuk menjalankan skrip sebelum aktual / sbin / init . (berikut ini hanyalah contoh dari parameter root dan rootdelay . bagian penting yang harus ditambahkan ke baris di cmdline.txt adalah init=/sbin/init-ro.)

root=/dev/mmcblk0p2 rootdelay=2 init=/sbin/init-ro

Tetapi ketahuilah bahwa untuk perangkat lunak apa pun yang memerlukan akses tulis di rootfs Anda harus memasang lokasi tmpfs yang sesuai atau menulis ke penyimpanan eksternal.

Andreas
sumber
1

2 sen saya, jauh lebih mudah (dan lebih bagus pada akhirnya) untuk membuat cadangan baterai yang andal untuk Pi daripada hidup dengan OS hanya baca. Tentu saja, itu berarti Anda akan memerlukan pengetahuan yang sangat mendasar tentang elektronik (dan maksud saya BASIC; kita berbicara 3-4 komponen). Orang ini membuat yang mewah hanya dengan beberapa: /raspberrypi/1360/how-do-i-build-a-ups-like-battery-backup-system

Jika Anda melakukan ini, JANGAN gunakan LiPo; NiCad adalah apa yang Anda inginkan. LiPo tidak dapat mengambil konstan atas pengisian daya; Anda sudah diperingatkan.

Juga, Anda tampaknya sangat khawatir tentang sesuatu yang, menurut pengalaman saya, adalah masalah yang sangat kecil. Saya meronta-ronta kotak Linux saya sepanjang waktu dan shutdown mendadak yang tidak terjadwal adalah masalah tentu saja ketika saya tidak dapat diganggu. Jika Anda menonaktifkan log maka Anda bahkan jarang mendapatkan keluhan tentang melakukan itu.

Untuk menonaktifkan semua log, Anda dapat menambahkan baris berikut sebagai aturan pertama di /etc/rsyslog.conf:

*.* ~

Bahkan ketika ada masalah, 99,9999% dari waktu (maksud saya hampir setiap kali dalam pengalaman pribadi saya) masalah itu diatasi ketika disk selanjutnya dipindai. Ketika itu terjadi terutama tergantung pada cuaca OS memperhatikan apa yang Anda lakukan (anehnya biasanya tidak). Karena Pi menggunakan kartu SD, saya membayangkan ini terjadi lebih sedikit pada Pi daripada di PC saya.

Krowe
sumber
1

Jika saya ingat benar sistem file read-only tidak akan 'mengamankan' kartu-SD. Saya memiliki 10 Pi beroperasi pada pelanggan (waktu aktif lebih dari 80 hari untuk setengah dari mereka) di mana daya tidak stabil seperti yang Anda harapkan / inginkan. Butuh waktu beberapa saat untuk menemukan catu daya (pengisi daya murah berperingkat 3A dan pengisi daya iPad 'mahal' diberi peringkat 2.3A) yang sebenarnya dapat menjaga Pi berjalan lebih dari beberapa hari, sebelum itu saya memiliki semua jenis masalah korupsi SD , termasuk dengan yang hanya digunakan read-only IIRC.

Masalah saya sebagian besar terpecahkan sekarang (karena persediaan baru), tetapi untuk proyek masa depan saya sedang mencari untuk melakukan filesystem root NFS. Ada banyak tutorial tentang hal ini, sebagian besar diselesaikan di sekitar gambar Pi fs normal, tetapi cukup mudah untuk melakukan debootstrap minimal dan mengubahnya menjadi sistem file root hanya baca melalui NFS. Pasangkan ini dengan uboot untuk Pi dan skrip uboot yang pintar, dan SD-card Anda hanya akan berisi beberapa firmware RPi, uboot image dan skrip uboot.

mycroes
sumber
0

Saya telah mendengar hal-hal baik tentang Puppy Linux untuk ini. Walaupun saya harus mengakui bahwa saya belum mencobanya.

Itu dapat diatur untuk tidak menulis kembali ke kartu SD.

Chenmunka
sumber
-1

Ada empat gambar yang tersedia dari halaman unduhan raspberrypi.org :

  • Debian "wheezy"
  • Soft-float Debian "wheezy"
  • Arch Linux ARM
  • QtonPi

Dan di sini adalah satu-satunya yang hanya dibaca secara default (tapi itu bisa diubah jika diperlukan):

Semoga salah satunya memenuhi kebutuhan Anda.

Yedric
sumber
Tidak ada satupun dari ini yang hanya bisa dibaca secara default.
Alex Chamberlain
@ alex, Poin bagus.
Yedric
TinyCoreLinux ditambahkan ke daftar. Ini hanya dibaca secara default.
avra