-
Notifications
You must be signed in to change notification settings - Fork 24
/
run_debian_arm64.sh
executable file
·139 lines (113 loc) · 3.32 KB
/
run_debian_arm64.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/bin/bash
LROOT=$PWD
JOBCOUNT=${JOBCOUNT=$(nproc)}
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
export INSTALL_PATH=$LROOT/rootfs_debian_arm64/boot/
export INSTALL_MOD_PATH=$LROOT/rootfs_debian_arm64/
export INSTALL_HDR_PATH=$LROOT/rootfs_debian_arm64/usr/
kernel_build=$PWD/rootfs_debian_arm64/usr/src/linux/
rootfs_path=$PWD/rootfs_debian_arm64
rootfs_image=$PWD/rootfs_debian_arm64.ext4
SMP="-smp 4"
if [ $# -lt 1 ]; then
echo "Usage: $0 [arg]"
echo "build_kernel: build the kernel image."
echo "build_rootfs: build the rootfs image."
echo " run: run debian system."
fi
if [ $# -eq 2 ] && [ $2 == "debug" ]; then
echo "Enable qemu debug server"
DBG="-s -S"
SMP=""
fi
make_kernel_image(){
echo "start build kernel image..."
make debian_defconfig
make -j $JOBCOUNT
}
prepare_rootfs(){
if [ ! -d $rootfs_path ]; then
echo "decompressing rootfs..."
xz -d rootfs_debian_arm64.tar.xz -k
tar xf rootfs_debian_arm64.tar
fi
}
build_kernel_devel(){
kernver="$(make -s kernelrelease)"
echo "kernel version: $kernver"
mkdir -p $kernel_build
rm rootfs_debian_arm64/lib/modules/$kernver/build
cp -a include $kernel_build
cp Makefile .config Module.symvers System.map vmlinux $kernel_build
mkdir -p $kernel_build/arch/arm64/
mkdir -p $kernel_build/arch/arm64/kernel/
cp -a arch/arm64/include $kernel_build/arch/arm64/
cp -a arch/arm64/Makefile $kernel_build/arch/arm64/
cp arch/arm64/kernel/module.lds $kernel_build/arch/arm64/kernel/
ln -s /usr/src/linux rootfs_debian_arm64/lib/modules/$kernver/build
# ln to debian linux-kbuild-4.19 package
ln -s /usr/src/linux-kbuild/scripts rootfs_debian_arm64/usr/src/linux/scripts
ln -s /usr/src/linux-kbuild/tools rootfs_debian_arm64/usr/src/linux/tools
}
check_root(){
if [ "$(id -u)" != "0" ];then
echo "superuser privileges are required to run"
echo "sudo ./run_debian_arm64.sh build_rootfs"
exit 1
fi
}
build_rootfs(){
if [ ! -f $rootfs_image ]; then
make install
make modules_install -j $JOBCOUNT
make headers_install
build_kernel_devel
echo "making image..."
dd if=/dev/zero of=rootfs_debian_arm64.ext4 bs=1M count=8192
mkfs.ext4 rootfs_debian_arm64.ext4
mkdir -p tmpfs
echo "copy data into rootfs..."
mount -t ext4 rootfs_debian_arm64.ext4 tmpfs/ -o loop
cp -af rootfs_debian_arm64/* tmpfs/
umount tmpfs
chmod 777 rootfs_debian_arm64.ext4
fi
}
run_qemu_debian(){
mkdir -p $PWD/kmodules
qemu-system-aarch64 -m 1024 -cpu cortex-a57 -M virt\
-nographic $SMP -kernel arch/arm64/boot/Image \
-append "noinintrd root=/dev/vda rootfstype=ext4 rw crashkernel=256M loglevel=8" \
-drive if=none,file=rootfs_debian_arm64.ext4,id=hd0 \
-device virtio-blk-device,drive=hd0 \
--fsdev local,id=kmod_dev,path=./kmodules,security_model=none \
-device virtio-9p-pci,fsdev=kmod_dev,mount_tag=kmod_mount\
$DBG
}
case $1 in
build_kernel)
make_kernel_image
#prepare_rootfs
#build_rootfs
;;
build_rootfs)
#make_kernel_image
check_root
prepare_rootfs
build_rootfs
;;
run)
if [ ! -f $LROOT/arch/arm64/boot/Image ]; then
echo "canot find kernel image, pls run build_kernel command firstly!!"
exit 1
fi
if [ ! -f $rootfs_image ]; then
echo "canot find rootfs image, pls run build_rootfs command firstly!!"
exit 1
fi
#prepare_rootfs
#build_rootfs
run_qemu_debian
;;
esac