Inhaltsverzeichnis
Raspi im QEmu ausführen
Eigentlich ist es ja einfach:
- Raspian- Image von https://www.raspberrypi.org/downloads/raspbian/ holen
- passenden Kernel von https://github.com/dhruvvyas90/qemu-rpi-kernel/
- Qemu installieren mit
sudo apt-get install qemu-system-arm
So ist jedenfalls die Theorie. Damit's dann wirklich funktioniert, muß man noch ein wenig das Bootverhalten des Image frisieren:
Die Partition im „Inneren“ des Imagefiles als Loopback mounten (geht in der Art angeblich erst ab Ubuntu 16.04, man beachte den -P switch)
sudo losetup -f --show -P 2016-09-23-raspbian-jessie-lite_modified.img
der obige Befehl zeigt dann auch, welches Loop- Device erzeugt wurde:
/dev/loop0
Die zweite Partition des Images mounten:
sudo mkdir /mnt/rpi sudo mount /dev/loop0p2 /mnt/rpi/
Ein paar Dateien editieren
# die Zeile in der Datei mit # auskommentieren sudo vim /mnt/rpi/etc/ld.so.preload # Alle Zeilen auskommentieren, die mit "/dev/mmcblk*" beginnen sudo vim /mnt/rpi/etc/fstab
Alles wieder abmelden:
sudo umount /mnt/rpi sudo losetup -d /dev/loop0
und jetzt kann's losgehen. In der Bash starten:
qemu-system-arm -kernel kernel-qemu-4.4.13-jessie -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda 2016-09-23-raspbian-jessie-lite_modified.img -net user,hostfwd=tcp::10022-:22 -net nic
oder man bastelt sich eben schnell einen symbolischen Link auf den gerade aktuellen Kernel
ln -s kernel-qemu-4.4.13-jessie actual-kernel
und überläßt das Parameter- Handling einem kleinen Script
- startRaspiQemu.sh
#!/bin/bash # Bash Menu Script Example PORT=${2:-10022} echo Port $PORT PS3='Please enter your starting option: ' options=("with root bash" "normal" "Quit") select opt in "${options[@]}" do case $opt in "with root bash") echo "you chose root bash" # start with root bash qemu-system-arm -kernel actual-kernel -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -hda $1 -net user,hostfwd=tcp::$PORT-:22 -net nic ;; "normal") echo "you chose normal" # start normal qemu-system-arm -kernel actual-kernel -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda $1 -net user,hostfwd=tcp::$PORT-:22 -net nic ;; "Quit") break ;; *) echo invalid option;; esac done
und wenn man dann auch noch wissen muss, wie man den verd###ten Mauszeiger wieder aus dem Fenster bekommt: Das ist linke Seite Strg+Alt..
Der Standard- User ist „pi“, das Passwort „raspberry“, und wer sich nach einer halben Stunde immer noch nicht einloggen konnte, dem sei verraten, das der Qemu eine amerikanische Tastatur fährt, das Passwort auf einer deutschen Tastatur also „raspberrz“ geschrieben wird. Nicht, das ich da natürlich nicht gleich drauf gekommen bin….
Mit dem -net..
Parameter des Qemu wird übrigens Portforwarding eingerichtet, so dass man sich auch per
ssh pi@localhost -p10022
anmelden kann
Das Image vergrößern
Im Original sind auf dem Image nur gute 200MB frei. So fügt man mal komfortable 2G hinzu:
- qemu-img.exe resize myImageFile.img +2G
in raspian
sudo fdisk -l
you have the list of normally 2 partitions, second beginning 122880sudo fdisk /dev/sda
in fdisk
- „d“ to delete a partition
- „2“ choose the second
the 2nd partition is now deleted
- „n“ to create partition
accept default primary, second partition but entry the good beginning address (122880)
- if doing mistake quit without saving change with „q“
- otherwise „w“ will write the new table to disk
in raspian
sudo reboot
after Reboot
sudo resize2fs /dev/sda2
- verify with df diskfree command
Vom Qemu rüber auf den echten Raspi
Wenn man seine Anpassungen im Emulator soweit fertig hat, möchte man sie ja vielleicht auch gerne mal im echten Raspi laufen lassen. Dazu macht man folgendes:
- eine Kopie des fertigen Image anlegen
- die Kopie im QEmu starten
- die oben beschriebenen Änderungen in /etc/fstab und /etc/ld.so.preload wieder rückgängig machen. Achtung: Die
preload
Datei als letztes, denn danach verweigert irgendwie die bash den Dienst. - QEmu beenden
- die gerade geänderte Image- Kopie kann jetzt auf die Speicherkarte gebrannt und auf dem Raspi gebootet werden.
SocketCan installieren
(schamlos abgekupfert von: http://tiqni.com/raspberry-pi/raspbian-built-in-can-controller-for-raspberry-pi)
The latest Rapsbian versions have now a built-in support for Microchip CAN Controller MCP251x, this makes things more easy than before, we don’t need anymore to compile and install modules manually for every new version.
Get latest Raspbian
Download latest Raspbian version here : https://www.raspberrypi.org/downloads/, and/or update your Raspberry Pi:
sudo su apt-get update apt-get upgrade apt-get autoremove apt-get install can-utils reboot
Enable SPI module
In Advanced Options of Raspi-config, enable SPI and load it by default at boot:
sudo su mount /dev/sda1 /boot raspi-config
Configure SPI Module
Overlay SPI configuration at boot configuration by adding below parameters:
sudo nano /boot/config.txt dtparam=spi=on # its a 12Mhz Quarz, so it needs to be 12000000 instead of 16000000 dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=22 dtoverlay=mcp2515-can1,oscillator=12000000,interrupt=25 dtoverlay=spi-bcm2835-overlay dtoverlay=spi-dma-overlay
do we need this?
# modprobe spi-bcm2708 # modprobe can # modprobe can-dev # modprobe can-raw # modprobe can-bcm # modprobe mcp251x # ip link set can0 up type can bitrate 500000
Set-up CAN interface
You can then configure and use CAN interface as usual:
sudo ip link set can0 up type can bitrate 250000