Linux-lab4:跟踪调试系统调用time/gettimeofday(基于arm64架构)

本文详细介绍了如何在Ubuntu虚拟机中安装交叉编译工具,编译BusyBox以创建简单的根文件系统,然后配置和编译Linux内核以支持ARM64架构。同时,文章也讨论了系统调用如gettimeofday的工作原理,并展示了使用QEMU4.2.1版本进行ARM64内核的模拟运行。此外,还提供了VSCode的launch.json和tasks.json配置,用于GDB调试Linux内核。

环境配置

由于Ubuntu系统采用x86架构,我们需要在Ubuntu虚拟机下安装交叉编译器和GDB。

sudo apt-get install gcc-aarch64-linux-gnu
sudo apt-get install libncurses5-dev build-essential git bison flex libssl-dev
sudo apt install gdb-multiarch

下载并解压busybox以建立简易的根文件系统:

wget https://busybox.net/downloads/busybox-1.33.1.tar.bz
bzip2 -d FileName.bz2
tar -xvf busybox-1.33.1.tar
cd busybox-1.33.1

设置静态编译选项:

make menuconfig ARCH=arm64
# Settings --->
# [*] Build static binary (no shared libs) 

然后编译busybox:

make
make install

 在编译完成的_install文件夹下进行一些配置。

cd _install
mkdir etc dev lib
cd etc

新建文件profile:设置环境变量和shell参数

 新建文件inittab:设置busybox执行的sysinit

 新建文件fstsb:设置文件系统挂载信息

 新建文件init.d/rcS:查找并创建字符设备与块设

 回到_install目录,在dev文件夹下新建console使得用户态的输出打印到串口上

cd ../dev
sudo mknod console c 5 1

将支持动态编译的相关程序拷贝到lib文件夹下:

 将_install文件夹整体放入linux编译后的文件夹中;在对linux源码编译前需

Building C object CMakeFiles/cmTC_9904b.dir/.test.c.o /opt/linux/x86-arm/arm-v01c02-linux-musleabi-gcc/bin/arm-v01c02-linux-musleabi-gcc -o CMakeFiles/cmTC_9904b.dir/.test.c.o -c /home/chen/shengwang/2/agora_rtsa_sdk/example/scripts/.test.c Linking C executable cmTC_9904b /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_9904b.dir/link.txt --verbose=1 /opt/linux/x86-arm/arm-v01c02-linux-musleabi-gcc/bin/arm-v01c02-linux-musleabi-gcc -rdynamic CMakeFiles/cmTC_9904b.dir/.test.c.o -o cmTC_9904b -L/home/chen/shengwang/2/agora_rtsa_sdk/example/../agora_sdk/lib/arm -Wl,-rpath,/home/chen/shengwang/2/agora_rtsa_sdk/example/../agora_sdk/lib/arm -lagora-rtc-sdk /opt/linux/x86-arm/arm-v01c02-linux-musleabi-gcc/bin/../lib/gcc/arm-linux-musleabi/10.3.0/../../../../arm-linux-musleabi/bin/ld: /home/chen/shengwang/2/agora_rtsa_sdk/example/../agora_sdk/lib/arm/libagora-rtc-sdk.so: undefined reference to `clock_gettime' /opt/linux/x86-arm/arm-v01c02-linux-musleabi-gcc/bin/../lib/gcc/arm-linux-musleabi/10.3.0/../../../../arm-linux-musleabi/bin/ld: /home/chen/shengwang/2/agora_rtsa_sdk/example/../agora_sdk/lib/arm/libagora-rtc-sdk.so: undefined reference to `nanosleep' /opt/linux/x86-arm/arm-v01c02-linux-musleabi-gcc/bin/../lib/gcc/arm-linux-musleabi/10.3.0/../../../../arm-linux-musleabi/bin/ld: /home/chen/shengwang/2/agora_rtsa_sdk/example/../agora_sdk/lib/arm/libagora-rtc-sdk.so: undefined reference to `lrintf' /opt/linux/x86-arm/arm-v01c02-linux-musleabi-gcc/bin/../lib/gcc/arm-linux-musleabi/10.3.0/../../../../arm-linux-musleabi/bin/ld: /home/chen/shengwang/2/agora_rtsa_sdk/example/../agora_sdk/lib/arm/libagora-rtc-sdk.so: undefined reference to `fstat' /opt/linux/x86-arm/arm-v01c02-linux-musleabi-gcc/bin/../lib/gcc/arm-linux-musleabi/10.3.0/../../../../arm-linux-musleabi/bin/ld: /home/chen/shengwang/2/agora_rtsa_sdk/example/../agora_sdk/lib/arm/libagora-rtc-sdk.so: undefined reference to `gettimeofday' /opt/linux/x86-arm/arm-v01c02-linux-musleabi-gcc/bin/../lib/gcc/arm-linux-musleabi/10.3.0/../../../../arm-linux-musleabi/bin/ld: /home/chen/shengwang/2/agora_rtsa_sdk/example/../agora_sdk/lib/arm/libagora-rtc-sdk.so: undefined reference to `localtime_r' /opt/linux/x86-arm/arm-v01c02-linux-musleabi-gcc/bin/../lib/gcc/arm-linux-musleabi/10.3.0/../../../../arm-linux-musleabi/bin/ld: /home/chen/shengwang/2/agora_rtsa_sdk/example/../agora_sdk/lib/arm/libagora-rtc-sdk.so: undefined reference to `stat' /opt/linux/x86-arm/arm-v01c02-linux-musleabi-gcc/bin/../lib/gcc/arm-linux-musleabi/10.3.0/../../../../arm-linux-musleabi/bin/ld: /home/chen/shengwang/2/agora_rtsa_sdk/example/../agora_sdk/lib/arm/libagora-rtc-sdk.so: undefined reference to `pthread_cond_timedwait' collect2: error: ld returned 1 exit status gmake[1]: *** [CMakeFiles/cmTC_9904b.dir/build.make:99: cmTC_9904b] Error 1 gmake[1]: Leaving directory '/tmp/chen-CMakeTest/CMakeFiles/CMakeTmp' gmake: *** [Makefile:127: cmTC_9904b/fast] Error 2 CMake Error at scripts/check.cmake:8 (message): TOOLCHAIN ERROR! Modify the toolchain script for your cross compiler: /home/chen/shengwang/2/agora_rtsa_sdk/example/scripts/toolchain.cmake Call Stack (most recent call first): CMakeLists.txt:5 (include) -- Configuring incomplete, errors occurred! See also "/home/chen/shengwang/2/agora_rtsa_sdk/example/build/CMakeFiles/CMakeOutput.log".
最新发布
10-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值