写这篇博客旨在帮助同学尽快完成作业,不要饱受学校无聊的作业折磨。
选做==不做
详见操作系统作业(在Ubuntu环境下编译一个新的内核)
虚拟机秘勺:ZF3R0-FHED2-M80TY-8QYGC-NPKYF
以任务2安装的版本VM16+Ubuntu-16.04.7-desktop-amd64+linux 5.16.14为基础进行下面操作。
借鉴自linux内核添加系统调用(详细),但内容并不完全相同,可能是版本不同的问题。
打开Computer/usr/src/linux-5.16.14/arch/x86/entry/syscalls
文件目录
双击syscall_64.tbl
在334后面添加系统调用号335和336.
打开Computer/usr/src/linux-5.16.14/arch/x86/include/asm
目录
打开文件syscalls.h
,输入如下两个函数声明
打开Computer/use/src/linux-5.16.14/kernel
目录,打开sys.c
(可搜索找到)
可在一堆include
和define
下添加代码
添加如下代码
在Computer/use/src/linux-5.16.14
目录下运行终端,输入make menuconfig
点击save
点击ok
Exit
继续Exit
这块我的CONFIG_SYSTEM_TRUSTED_KEYS=""
不需要修改,故可以跳过,如果和我版本一致。
之后还要修改一些东西,不然编译途中会出错。
vim ./.config。
令CONFIG_SYSTEM_TRUSTED_KEYS=“”。(使用shift+“:”,输入?CONFIG_SYSTEM_TRUSTED_KEYS回车后查询)
sudo make -j4
(因为我是双核)
sudo make modules_install
sudo make install
在桌面新建文件test.c
输入测试代码
#include
#include
#include
int main(){
long a=syscall(335,1,3);
printf("%ld\n",a);
long b=syscall(336,14,15,16);
printf("%ld\n",b);
return 0;
}
在桌面文件打开终端
输入gcc ./test.c -o test
编译
输入./test
运行
查看输出
与预期相同。任务完成!
在桌面新建bash.sh文件,写入
#!/bin/bash
filenames=$(ls "$1"*.txt)
echo "$1"
echo $filenames
for file in $filenames
do
regular=$(tail -n 1 $file)
if [[ "$regular" =~ [0-9]{4}-[0-9]{2}-[0-9]{2}* ]];then
sed -i '$d' $file
echo $USER:`date +"%Y-%m-%d %H:%M:%S"` >> $file
else
echo $USER:`date +"%Y-%m-%d %H:%M:%S"` >> $file
fi
done
sudo chmod -R 777 ./
否则会报错,Permission Denied。
在桌面(与bash.sh
同目录)下添加a.txt
,b.txt
在此环境下打开终端,输入./bash.sh ./
输出如下
打开a.txt
或b.txt
后出现用户名:年份 时间