Kurzes Update
https://github.com/ayufan-rock64/linux-build/releases/download/0.8.0rc10/stretch-openmediavault-rockpro64-0.8.0rc10-1125-armhf.img.xz
Startet 🙂 Incl. WiFi & PCIe NVMe SSD
War aber nur ein ganz kurzer Test!!
Basis für diesen Beitrag
rock64@rockpro64:/boot$ uname -a
Linux rockpro64 4.4.132-1075-rockchip-ayufan-ga83beded8524 #1 SMP Thu Jul 26 08:22:22 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux
So sieht die Partitionstabelle des Images aus (SD-Karte)
rock64@rockpro64:/boot$ sudo fdisk /dev/mmcblk0
[sudo] password for rock64:
Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/mmcblk0: 29.7 GiB, 31914983424 bytes, 62333952 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 2C9A4A22-7AA8-4A1B-815E-0C3E2E7065E6
Device Start End Sectors Size Type
/dev/mmcblk0p1 64 8063 8000 3.9M Linux filesystem
/dev/mmcblk0p2 8064 8191 128 64K Linux filesystem
/dev/mmcblk0p3 8192 16383 8192 4M Linux filesystem
/dev/mmcblk0p4 16384 24575 8192 4M Linux filesystem
/dev/mmcblk0p5 24576 32767 8192 4M Linux filesystem
/dev/mmcblk0p6 32768 262143 229376 112M Microsoft basic data
/dev/mmcblk0p7 262144 62333918 62071775 29.6G Linux filesystem
Command (m for help):
Partition | Start Sector | Number of Sectors | Partition Size | PartNum in GPT | Requirements |
---|---|---|---|---|---|
MBR | 0 | 1 | 512 | ||
Primary GPT | 1 | 63 | 32256 | ||
loader1 | 64 | 7104 | 4096000 | 1 | preloader (miniloader or U-Boot SPL) |
Vendor Storage | 7168 | 512 | 262144 | SN, MAC and etc. | |
Reserved Space | 7680 | 384 | 196608 | Not used | |
reserved1 | 8064 | 128 | 65536 | legacy DRM key | |
U-Boot ENV | 8128 | 64 | 32768 | ||
reserved2 | 8192 | 8192 | 4194304 | legacy parameter | |
loader2 | 16384 | 8192 | 4194304 | 2 | U-Boot or UEFI |
trust | 24576 | 8192 | 4194304 | 3 | trusted-os like ATF, OP-TEE |
boot(bootable must be set) | 32768 | 229376 | 117440512 | 4 | kernel, dtb, extlinux.conf, ramdisk |
rootfs | 262144 | - | - | 5 | Linux system |
Secondary GPT | 16777183 | 33 | 16896 |
Quelle der Info's (bearbeitet) Rockchip.
Hier sieht man das zwei Partitionen gemountet werden.
rock64@rockpro64:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 992M 0 992M 0% /dev
tmpfs 200M 484K 199M 1% /run
/dev/mmcblk0p7 30G 1.3G 27G 5% /
tmpfs 996M 0 996M 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 996M 0 996M 0% /sys/fs/cgroup
/dev/mmcblk0p6 112M 4.0K 112M 1% /boot/efi
/dev/sda1 1.9T 43G 1.8T 3% /mnt
tmpfs 200M 0 200M 0% /run/user/1000
rock64@rockpro64:/boot/efi$ ls -la
total 22
drwxr-xr-x 3 root root 16384 Jan 1 1970 .
drwxr-xr-x 5 root root 4096 Aug 27 17:23 ..
drwxr-xr-x 2 root root 2048 Jul 26 09:15 extlinux
Inhalt extlinux
rock64@rockpro64:/boot/efi$ ls -la extlinux/
total 20
drwxr-xr-x 2 root root 2048 Jul 26 09:15 .
drwxr-xr-x 3 root root 16384 Jan 1 1970 ..
-rwxr-xr-x 1 root root 688 Jul 21 22:50 extlinux.conf
Datei extlinux.conf
timeout 10
default kernel-latest
menu title select kernel
label kernel-latest
kernel /Image
initrd /initrd.img
fdt /dtb
append rw root=LABEL=linux-root rootwait rootfstype=ext4 panic=10 init=/sbin/init coherent_pool=1M ethaddr=${ethaddr} eth1addr=${eth1addr} serial=${serial#} cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1
label kernel-previous
kernel /Image.bak
initrd /initrd.img.bak
fdt /dtb.bak
append rw root=LABEL=linux-root rootwait rootfstype=ext4 panic=10 init=/sbin/init coherent_pool=1M ethaddr=${ethaddr} eth1addr=${eth1addr} serial=${serial#} cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1
rock64@rockpro64:/boot$ ls
System.map-4.4.132-1075-rockchip-ayufan-ga83beded8524 filesystem.packages
config-4.4.132-1075-rockchip-ayufan-ga83beded8524 filesystem.packages-remove
dtbs initrd.img-4.4.132-1075-rockchip-ayufan-ga83beded8524
efi vmlinuz-4.4.132-1075-rockchip-ayufan-ga83beded8524
extlinux
In extlinux liegt auch hier eine extlinux.conf mit folgendem Inhalt.
timeout 10
menu title select kernel
label kernel-4.4.132-1075-rockchip-ayufan-ga83beded8524
kernel /boot/vmlinuz-4.4.132-1075-rockchip-ayufan-ga83beded8524
initrd /boot/initrd.img-4.4.132-1075-rockchip-ayufan-ga83beded8524
devicetreedir /boot/dtbs/4.4.132-1075-rockchip-ayufan-ga83beded8524
append rw panic=10 init=/sbin/init coherent_pool=1M ethaddr=${ethaddr} eth1addr=${eth1addr} serial=${serial#} cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1 root=LABEL=linux-root rootwait rootfstype=ext4
label kernel-4.4.132-1075-rockchip-ayufan-ga83beded8524-memtest
kernel /boot/vmlinuz-4.4.132-1075-rockchip-ayufan-ga83beded8524
initrd /boot/initrd.img-4.4.132-1075-rockchip-ayufan-ga83beded8524
devicetreedir /boot/dtbs/4.4.132-1075-rockchip-ayufan-ga83beded8524
append rw panic=10 init=/sbin/init coherent_pool=1M ethaddr=${ethaddr} eth1addr=${eth1addr} serial=${serial#} cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1 root=LABEL=linux-root rootwait rootfstype=ext4 memtest
Ok, das kenne ich. Hier stellt man ein von wo er bootet usw. Was ich nicht verstehe, wofür braucht es dann /boot/efi (/dev/mmcblk0p6) ?? Es gibt immer einen Eintrag für die aktuelle Kernelversion und die alte Kernelversion. Wenn was schief geht, kann man die alte Version booten. Die aktuelle Version steht immer oben. Im Beispiel handelt es sich um das Original Image, kein anderer Kernel ist installiert.
A symbol table is a look-up between symbol names and their addresses in memory. A symbol name may be the name of a variable or the name of a function.
Quelle: https://en.wikipedia.org/wiki/System.map
Beispiel (gekürzt)
0000000000000000 A __rela_size
0000000000000000 A _kernel_flags_le_hi32
0000000000000000 A _kernel_offset_le_hi32
0000000000000000 A _kernel_size_le_hi32
000000000000000a A _kernel_flags_le_lo32
0000000000000200 A PECOFF_FILE_ALIGNMENT
0000000000080000 A _kernel_offset_le_lo32
000000000119f908 A __rela_offset
0000000001392000 A _kernel_size_le_lo32
ffffff8008080000 t _head
ffffff8008080000 T _text
ffffff8008080800 T __exception_text_start
ffffff8008080800 T _stext
ffffff8008080800 T do_undefinstr
ffffff8008080a1c T do_sysinstr
ffffff8008080ab4 T do_mem_abort
ffffff8008080b60 T do_sp_pc_abort
ffffff8008080c34 T do_debug_exception
ffffff8008080ce8 T __exception_text_end
ffffff8008080ce8 T __irqentry_text_start
ffffff8008080ce8 t gic_handle_irq
ffffff8008080da8 t gic_handle_irq
ffffff8008080f28 T __do_softirq
ffffff8008080f28 T __irqentry_text_end
ffffff8008080f28 T __softirqentry_text_start
ffffff8008081228 T __entry_text_start
ffffff8008081228 T __softirqentry_text_end
ffffff8008081800 T vectors
Linux Kernel Konfiguration
Beispiel (gekürzt)
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm64 4.4.132 Kernel Configuration
#
CONFIG_ARM64=y
CONFIG_64BIT=y
CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
CONFIG_MMU=y
CONFIG_ARCH_MMAP_RND_BITS_MIN=18
CONFIG_ARCH_MMAP_RND_BITS_MAX=24
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16
CONFIG_ARM64_PAGE_SHIFT=12
CONFIG_ARM64_CONT_SHIFT=4
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CSUM=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ZONE_DMA=y
CONFIG_HAVE_GENERIC_RCU_GUP=y
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_NEED_SG_DMA_LENGTH=y
CONFIG_SMP=y
CONFIG_SWIOTLB=y
CONFIG_IOMMU_HELPER=y
CONFIG_KERNEL_MODE_NEON=y
CONFIG_FIX_EARLYCON_MEM=y
CONFIG_PGTABLE_LEVELS=3
Beispiel (gekürzt)
adduser 3.116ubuntu1
alsa-utils 1.1.3-1ubuntu1
apt 1.6.1
apt-utils 1.6.1
base-files 10.1ubuntu2
base-passwd 3.5.44
bash 4.4.18-2ubuntu1
binutils 2.30-15ubuntu1
binutils-aarch64-linux-gnu 2.30-15ubuntu1
binutils-common:arm64 2.30-15ubuntu1
bsdutils 1:2.31.1-0.4ubuntu3
build-essential 12.4ubuntu1
busybox-initramfs 1:1.27.2-2ubuntu3
bzip2 1.0.6-8.1
ca-certificates 20180409
console-setup 1.178ubuntu2
console-setup-linux 1.178ubuntu2
coreutils 8.28-1ubuntu1
Datei ist leer
initrd ist ein temporäres Dateisystem, das vom Linux-Kernel während des Bootvorgangs verwendet wird.
Quelle: https://de.wikipedia.org/wiki/Initrd
Jedes mal, wenn man einen Kernel installiert, wird dieses File angelegt. Ein Beispiel von meinem ROCKPro64 mit NVMe SSD.
rock64@rockpro64v2_0:/boot$ ls
config-4.18.0-rc8-1060-ayufan-g45828c4db727
config-4.4.132-1075-rockchip-ayufan-ga83beded8524
dtbs
efi
extlinux
filesystem.packages
filesystem.packages-remove
initrd.img-4.18.0-rc8-1056-ayufan-gad339353011e
initrd.img-4.18.0-rc8-1060-ayufan-g45828c4db727
initrd.img-4.18.0-rc8-1060-ayufan-g45828c4db727.bak
initrd.img-4.4.132-1075-rockchip-ayufan-ga83beded8524
System.map-4.18.0-rc8-1060-ayufan-g45828c4db727
System.map-4.4.132-1075-rockchip-ayufan-ga83beded8524
vmlinuz-4.18.0-rc8-1060-ayufan-g45828c4db727
vmlinuz-4.4.132-1075-rockchip-ayufan-ga83beded8524
Hier kann man auch ganz gut erkennen, das es immer ein initrd.img gibt, eine entsprechende System.map und eine vmlinux.
On Linux systems, vmlinux is a statically linked executable file that contains the Linux kernel in one of the object file formats supported by Linux, which includes ELF, COFF and a.out. The vmlinux file might be required for kernel debugging, symbol table generation or other operations, but must be made bootable before being used as an operating system kernel by adding a multiboot header, bootsector and setup routines.
Ich denke, das man das normalerweise nicht braucht. Aber ich mach hier zur Sicherheit mal ein paar ???? dran!
wird fortgesetzt..
Um einen neuen Kernel booten zu können, brauche ich diese 4 Dateien unter /boot
Und den Ordner /boot/dtbs/4.19.0-rc4-1065-ayufan-g72e04c7b3e06 mit folgendem Inhalt
rock64@rockpro64v2_0:/boot/dtbs/4.19.0-rc4-1065-ayufan-g72e04c7b3e06$ ls -la
total 104
drwxr-xr-x 26 root root 4096 Sep 30 09:54 .
drwxr-xr-x 6 root root 4096 Sep 30 09:55 ..
drwxr-xr-x 2 root root 4096 Sep 30 09:54 al
drwxr-xr-x 2 root root 4096 Sep 30 09:54 allwinner
drwxr-xr-x 2 root root 4096 Sep 30 09:54 altera
drwxr-xr-x 2 root root 4096 Sep 30 09:54 amd
drwxr-xr-x 2 root root 4096 Sep 30 09:54 amlogic
drwxr-xr-x 2 root root 4096 Sep 30 09:54 apm
drwxr-xr-x 2 root root 4096 Sep 30 09:54 arm
drwxr-xr-x 4 root root 4096 Sep 30 09:54 broadcom
drwxr-xr-x 2 root root 4096 Sep 30 09:54 cavium
drwxr-xr-x 2 root root 4096 Sep 30 09:54 exynos
drwxr-xr-x 2 root root 4096 Sep 30 09:54 freescale
drwxr-xr-x 2 root root 4096 Sep 30 09:54 hisilicon
drwxr-xr-x 2 root root 4096 Sep 30 09:54 lg
drwxr-xr-x 2 root root 4096 Sep 30 09:54 marvell
drwxr-xr-x 2 root root 4096 Sep 30 09:54 mediatek
drwxr-xr-x 2 root root 4096 Sep 30 09:54 nvidia
drwxr-xr-x 2 root root 4096 Sep 30 09:54 qcom
drwxr-xr-x 2 root root 4096 Sep 30 09:54 renesas
drwxr-xr-x 2 root root 4096 Sep 30 09:54 rockchip
drwxr-xr-x 2 root root 4096 Sep 30 09:54 socionext
drwxr-xr-x 2 root root 4096 Sep 30 09:54 sprd
drwxr-xr-x 2 root root 4096 Sep 30 09:54 synaptics
drwxr-xr-x 2 root root 4096 Sep 30 09:54 xilinx
drwxr-xr-x 2 root root 4096 Sep 30 09:54 zte
Unter /boot/extlinux liegt dann die Datei extlinux.conf
Die sieht bei mir dann so aus
timeout 10
menu title select kernel
label kernel-4.19.0-rc4-1065-ayufan-g72e04c7b3e06
kernel /boot/vmlinuz-4.19.0-rc4-1065-ayufan-g72e04c7b3e06
initrd /boot/initrd.img-4.19.0-rc4-1065-ayufan-g72e04c7b3e06
devicetreedir /boot/dtbs/4.19.0-rc4-1065-ayufan-g72e04c7b3e06
append rw panic=10 init=/sbin/init coherent_pool=1M ethaddr=${ethaddr} eth1addr=${eth1addr} serial=${serial#} cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1 root=LABEL=TEST rootwait rootfstype=ext4
label kernel-4.19.0-rc4-1065-ayufan-g72e04c7b3e06-memtest
kernel /boot/vmlinuz-4.19.0-rc4-1065-ayufan-g72e04c7b3e06
initrd /boot/initrd.img-4.19.0-rc4-1065-ayufan-g72e04c7b3e06
devicetreedir /boot/dtbs/4.19.0-rc4-1065-ayufan-g72e04c7b3e06
append rw panic=10 init=/sbin/init coherent_pool=1M ethaddr=${ethaddr} eth1addr=${eth1addr} serial=${serial#} cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1 root=LABEL=TEST rootwait rootfstype=ext4 memtest
Darunter kommen dann evt. die alten Kernel die installiert waren, das habe ich hier im Beispiel weg gelassen.