-
Notifications
You must be signed in to change notification settings - Fork 24
/
run_debian_riscv.sh
executable file
·123 lines (101 loc) · 3.11 KB
/
run_debian_riscv.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
#!/bin/bash
LROOT=$PWD
JOBCOUNT=${JOBCOUNT=$(nproc)}
export ARCH=riscv
export CROSS_COMPILE=riscv64-linux-gnu-
export INSTALL_PATH=$LROOT/rootfs_debian_riscv/boot/
export INSTALL_MOD_PATH=$LROOT/rootfs_debian_riscv/
export INSTALL_HDR_PATH=$LROOT/rootfs_debian_riscv/usr/
kernel_build=$PWD/rootfs_debian_riscv/usr/src/linux/
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 $LROOT/rootfs_debian_riscv ]; then
echo "decompressing rootfs..."
tar -Jxf rootfs_debian_riscv.tar.xz
fi
}
build_kernel_devel(){
kernver="$(make -s kernelrelease)"
echo "kernel version: $kernver"
mkdir -p $kernel_build
rm rootfs_debian_riscv/lib/modules/$kernver/build
cp -a include $kernel_build
cp Makefile .config Module.symvers System.map vmlinux $kernel_build
mkdir -p $kernel_build/arch/riscv/
mkdir -p $kernel_build/arch/riscv/kernel/
cp -a arch/riscv/include $kernel_build/arch/riscv/
cp -a arch/riscv/Makefile $kernel_build/arch/riscv/
cp arch/riscv/kernel/module.lds $kernel_build/arch/riscv/kernel/
ln -s /usr/src/linux rootfs_debian_riscv/lib/modules/$kernver/build
# ln to debian linux-kbuild-4.19 package
ln -s /usr/src/linux-kbuild-4.19/scripts rootfs_debian_riscv/usr/src/linux/scripts
ln -s /usr/src/linux-kbuild-4.19/tools rootfs_debian_riscv/usr/src/linux/tools
}
build_rootfs(){
if [ ! -f $LROOT/rootfs_debian_riscv.ext4 ]; then
make install
make modules_install -j $JOBCOUNT
make headers_install
build_kernel_devel
echo "making image..."
dd if=/dev/zero of=rootfs_debian_riscv.ext4 bs=1M count=4096
mkfs.ext4 rootfs_debian_riscv.ext4
mkdir -p tmpfs
echo "copy data into rootfs..."
mount -t ext4 rootfs_debian_riscv.ext4 tmpfs/ -o loop
cp -af rootfs_debian_riscv/* tmpfs/
umount tmpfs
chmod 777 rootfs_debian_riscv.ext4
fi
}
run_qemu_debian(){
qemu-system-riscv64 -machine virt -m 1024 $SMP\
-kernel riscv_fw_jump.elf -device loader,file=arch/riscv/boot/Image,addr=0x80200000\
-nographic --append "root=/dev/vda rootfstype=ext4 rw"\
-drive if=none,file=rootfs_debian_riscv.ext4,id=hd0 -device virtio-blk-device,drive=hd0\
-device virtio-net-device,netdev=usernet -netdev user,id=usernet\
--fsdev local,id=kmod_dev,path=./kmodules,security_model=none\
-device virtio-9p-device,fsdev=kmod_dev,mount_tag=kmod_mount
}
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/riscv/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