간단히 말해서:
시스템 백업에서 VERSION, SUVERSION 및 PATCHLEVEl 번호를 추출하는 방법은 무엇입니까 .img
? 루트 권한이 없는 것이 가장 좋습니다.
확장:
다음 페이지에서:
https://www.raspberrypi.org/downloads/raspbian/
ARM 기반 Debian/Raspian 시스템의 전체 시스템 백업을 나타내는 zip
Debian 추출을 제공합니다 ..img
커스텀 커널을 생성하기 위해서는 시스템의 VERSION, SUVERSION, PATCHLEVEL을 알아야 하는데, 이는 일반적인 커널에서 제공하는 정보와 동일하다.
$ uname -r
4.9.0-3-amd64
가장 쉬운 방법은 시스템을 직접 로드하고 명령을 실행하는 것이지만 이 경우에는 작동하지 않습니다.
표적:
미러링된 커널을 패치하고 크로스 컴파일해야 합니다. 내 의도는 커널이 업데이트될 때 추가로 "쉽게" 적용될 수 있도록 이 프로세스에 대한 스크립트를 만드는 것입니다.
답변1
이것이 디스크 이미지라고 생각한다면 새 커널로 "이미지를 패치"하는 것은 매우 어려울 것입니다. 왜냐하면 실제 커널 파일뿐만 아니라 커널에 인코딩된 나머지 파일 시스템도 고려해야 하기 때문입니다. 조각화로 인해 커널이 디스크에 연속적으로 저장되지 않을 수 있습니다. 최신 커널이 더 크거나 작을 경우 그에 따라 이미지의 파일 시스템을 업데이트해야 합니다.
추출하려는 변수에 대해 어떻게든 전체 이미지를 검색하더라도 히트가 이미지 파일 시스템에 실제로 존재하는 파일에서 나오는지, 아니면 더 이상 참조되지 않는 오래된 파일에서 나오는지 알 수 없습니다.
가장 좋은 조언은 이미지를 마운트하고 업데이트하거나 SD 카드에 쓰고 업데이트하고 다시 생성하는 것입니다.
어떻게든 이미지를 마운트하지 않고 이 작업을 수행하는 경우 시뮬레이션된 파일 시스템을 포함해야 합니다.
답변2
이것은 2017-09-07-raspbian-stretch-lite.img
사이트의 이미지에 작동하는 것 같습니다.
$ sudo kpartx -rva 2017-09-07-raspbian-stretch-lite.img
add map loop0p1 (252:19): 0 85622 linear 7:0 8192
add map loop0p2 (252:20): 0 3528040 linear 7:0 94208
$ sudo mount -r /dev/mapper/loop0p1 mnt
$ LC_ALL=C gawk -v RS='\37\213\10\0' 'NR==2{printf "%s", RS $0; exit}
' < mnt/kernel.img | gunzip | grep -aPom1 'Linux version \S+'
Linux version 4.9.41+
( \37\213\10\0
gzip 압축 데이터의 시작 위치를 식별합니다).
루트가 아닌 사용자로서 이미지의 첫 번째 파티션이 항상 4MiB라고 가정하고 GNU를 사용하여 mtools
해당 vfat 파티션에서 추출합니다.kernel.img
$ MTOOLS_SKIP_CHECK=1 mtype -i 2017-09-07-raspbian-stretch-lite.img@@4M ::kernel.img|
LC_ALL=C gawk -v RS='\37\213\10\0' 'NR==2{printf "%s", RS $0; exit}' |
gunzip | grep -aPom1 'Linux version \K\S+'
4.9.41+
그렇지 않은 경우 /dev/fd
이를 지원하는 시스템(및 GNU grep
)에서:
MTOOLS_SKIP_CHECK=1 MTOOLSRC=/dev/fd/3 mtype z:kernel.img \
3<< EOF 4< 2017-09-07-raspbian-stretch-lite.img |
drive z:
file="/dev/fd/4"
partition=1
EOF
LC_ALL=C gawk -v RS='\37\213\10\0' 'NR==2{printf "%s", RS $0; exit}' |
gunzip | grep -aPom1 'Linux version \K\S+'
(다른 시스템에서는 임의의 파일 이름을 더 쉽게 수용할 수 있도록 를 file="2017-09-07-raspbian-stretch-lite.img"
사용 하세요.)/dev/fd/4
zip 파일에서 전체 이미지를 추출하지 않고 첫 번째 파티션만 추출할 수 있습니다.
#! /bin/zsh -
zip=${1?zip file missing}
MTOOLS_SKIP_CHECK=1 mtype -i =(
unzip -p -- "$zip" | perl -ne '
BEGIN{$/=\512}
if ($. == 1) {
($offset, $size) = unpack("x454L<2",$_)
} elsif ($. > $offset) {
print;
if ($. == $offset + $size - 1) {exit}
}') ::kernel.img |
LC_ALL=C gawk -v RS='\37\213\10\0' 'NR==2{printf "%s", RS $0; exit}' |
gunzip | grep -aPom1 'Linux version \K\S+'
답변3
마운트해 볼 수 있습니다.
fdisk -l /path/to/your.img
mount -o loop,offset=sector size * start of the partition your.img /yourfolder
sector size * start of the partition
: fdisk 출력을 보고 다음을 곱합니다.
그러면 시작 폴더에 있는 파일을 볼 수 있습니다.