操作系统第二次实验

使用的教程:
https://blog.csdn.net/qq_38454977/article/details/71367655
https://blog.csdn.net/qq_36172505/article/details/80372029
https://blog.csdn.net/weixin_44224230/article/details/89945899
https://blog.csdn.net/qq_41175905/article/details/80529245

第一步 下载内核模块压缩包

https://www.kernel.org/
下载了4.19.86
linux命令行中文乱码
https://blog.csdn.net/qq_37253988/article/details/89389676
1.将内核压缩包linux-4.10.14.tar.xz放入Ubuntu系统
2.把压缩包解压缩,使用命令 tar -xvf linux-4.19.86.tar.xz
3.将解压后的文件夹放到usr/src目录,这时候我们需要管理员权限,使用sudo su命令,之后输入密码就能获取权限,接下来使用mv linux-4.19.86 /usr/src将文件夹放入 /usr/src

第二步 修改文件

使用命令vim /usr/src/linux-4.10.14/kernel/sys.c,在sys.c的末尾加入以下函数

asmlinkage int sys_helloworld(int number){ 
printk(“hello world”); 
return number; 
} 

使用命令vim /usr/src/linux-4.10.14/include/uapi/asm-generic/unistd.h
在223条声明处,改成这个,把原来的声明注释掉

#define __NR_helloworld 223
__SYSCALL(__NR_helloworld, sys_helloworld)

第三步 编译安装内核

第一步:make mrproper 清除内核中不稳定的目标文件夹,附属文件及内核配置文件
第二步:make clean 清除以前生成的目标文件和其他文件
第三步:make menuconfig 配置内核,采用默认配置即可,选择exit
这个地方报错了
include/config/auto.conf are missing

sudo apt install bison
sudo apt install flex
apt install libncurses-dev
make menuconfig

第五步:使用lscpu命令看看你的cpu支持几个线程。如果在虚拟机中,可以在配置中调整cpu的个数,然后重启虚拟机(不过改过后虚拟机大概会自动重启),进入到当前的/usr/src/linux-4.10.14文件夹下,如果lscpu显示有8个就使用make –j8命令,加快编译速度(不然要等好久的!!)
报错:
没有openssl/opensslv.h
使用命令:
apt install libssl-dev
apt install libelf-dev

尝试写写目标函数
随机数发生器
https://blog.csdn.net/w_y_x_y/article/details/80199694
睡眠函数
https://blog.csdn.net/github_35124642/article/details/51902089
https://blog.csdn.net/chaseraod/article/details/75331806
https://blog.csdn.net/he_shuai20/article/details/72904545
内核定时器
https://blog.csdn.net/gbmaotai/article/details/82344883

void timer_func(unsigned long data) //2.定义定时器处理函数
{
printk("time out [%d]\n", (int)data);
}
void diag(long number)//通过传不同的参数更改种子值,一般传time(NULL)
{

    next=number;
    next = next * 1103515245 + 12345;
    long timeout = (next/65536) % 32768
    /*定义一个名为my_timer的timer_list数据结构*/
    struct timer_list my_timer;
    /*初始化my_timer的部分内部成员*/
    init_timer(&my_timer);
    my_timer.expires = jiffies + timeout*HZ; //2.设定定时器处理函数触发时间为5秒
    my_timer.function = timer_func; //2.给结构体指定定时器处理函数
    my_timer.data = (unsigned long)99; //2.设定定时器处理函数的传参
    add_timer(&my_timer); //3.激活定时器
    /*signal(SIGALRM,wakeUp);
	alarm(timeout);
	pause();
	int ret = alarm(0);
	sigaction(SIGALRM,&oact,NULL);
	return ret;*/
	/*struct semaphore *sem=-1;
	i=down_timeout(-1,timeout);/*
	/*m=5000;
a=2501;
b=1343;
  r = number;
  r=(2501*number-1+1343)% 5000;
  if(r<1000)
      r=r+1000;
  
  for (i = 1;i<=n;i++)
  ri = (a*ri-1 + b) mod m*/
	/*if(i<0)
	{
	    sem=1;
	    up(sem);
	}*/
}
void sys_timefunc(unsigned long data)
{
        printk("time out [%d]\n", (int)data);
}
long sys_diag(long number)
{
        number = number * 1103515245 + 12345;
        long timeout;
        timeout = (number/65536) % 5000;
         if(timeout<1000)
                timeout=timeout+1000;
        struct timer_list my_timer;
        init_timer(&my_timer);
        my_timer.expires = jiffies + timeout*HZ;
        my_timer.function = sys_timefunc;
        my_timer.data = (unsigned long)timeout;
        add_timer(&my_timer);
        return number;
}

11.26这回按照https://blog.csdn.net/weixin_44224230/article/details/89945899做的添加自定义系统调用
报错说cc1的时候就用https://blog.csdn.net/ctthuangcheng/article/details/50356649来增加交换内存
然后我现在好像因为空间都占满了所以打不开虚拟机了。。。
使用ccache加速make效果拔群!

#include<stdio.h>
#include<linux/kernel.h>
#include<sys/syscall.h>
#include<unistd.h>

int main()
{
        long int a = syscall(336,8);
        printf("return %ld\n",a);
        return 0;
}
~                                                                         
asmlinkage void sys_timefunc(unsigned long data)
{
	printk("time out [%d]\n", (int)data);
}

asmlinkage long sys_diag(long number)
{
	 number = number * 1103515245 + 12345;
     long timeout;
     timeout = (number/65536) % 5000;
        if(timeout<1000)
                timeout=timeout+1000;
	printk("ready to sleep for %d ms\n",timeout);
        struct timer_list my_timer;
        init_timer(&my_timer);
        my_timer.expires = jiffies + timeout*HZ;
        my_timer.function = sys_timefunc;
        add_timer(&my_timer);
        return number;
}

mdelay()用方法二直接实现
https://blog.csdn.net/Egqawkq/article/details/88970390
https://blog.csdn.net/ThugKd/article/details/50117125

要用一个#include<linux/jiffies.h>才能实现内核定时器

一、 实验目的 1、 通过实验了解和熟悉Linux文件系统 2、 掌握文件操作命令 3、 了解文件与目录的默认权限,掌握文件权限的设置 4、 掌握文件的链接 二、 开发工具和运行环境 1、虚拟机VMware 2、Linux操作系统 三、 实验内容 1、了解和熟悉Linux文件系统 了解Linux文件系统、文件命名、文件类型和常见目录:根目录(/)、 .bin、boot、dev、etc、home、Lib、lost+found、 opt、root、 usr、mnt、proc、sbin、 tmp、 var. 2、文件操作命令: (文件和目录名自拟、自行设计实验步骤) (1) 1s: 显示目录内容 -a显示指定目录下所有的目录与文件 -1以 长格式显示文件的详细信息。 -d显示目录本身信息 i显示索引号 (2) cd:改变当前工作目录 格式: cd [目录名] cd .. 上移- -层目录(注意,需要有空格) cd 移到自己的主目录 (3) cat: 查看文件信息命令 显示文件信息:格式: cat [选项]文件名 -n输出编号 建立文件: cat>新文件名ctrl+d 合并文件: cat 文件1文件2>新文件 (4) more: 逐屏显示文件内容 格式: more 文件名 (5) cp:复制命令 格式: cp [选项] 源文件或目录目标文件或目录 同时可以复制多个文件 -f 出现覆盖情况不提示 -p复制后,保持原有属性。目标文件保持原有的生成日期和inode编号 -r 复制目录及目录下的文件 普通用户并不能进行这样的操作,只能切换到root用户然后进行-r的递归复制。 (6) rm: 删除文件与目录 格式: mv [选项] 文件名或目录名 -f删除时不提示 -r 删除目录及目录下的文件(常用: -rf ) (7) mv: 文件移动及改名命令 格式: mv [选项]源文件或目录 目 标文件或目录 -f覆盖文件时 不提示 (8) grep: 文件信息检索命令 格式: grep [选项]字符串 [文件 ... ] -i 不区分大小写 (9) sort: 排序命令 格式: sort [选项][文件列表] (10) mkdir 创建目录命令 格式: mkdir [选项] [目录名] 可以同时创建多个目录 p :递归创建目录 -m:创建目录的时候赋予权限 (11) rmdir删除“空”目录命令 格式: rmdir [选项] [目录名] 注意:目录为空才能删除;否则需采用rm - r来删除。 p :递归删除目录,删除子目录,其父目录为空时,也同时删除3、文件权限的设置: (文件和目录名自拟、自行设计实验步骤) 文件的属主与属组 (1) chown [选项] [所有者][:[组]] 文件列表 更改每个文件的所有者和/或所属组。 字母模式形式即“用户对象操作符号操作权限”,其命令格式为:(2) chmod [选项]模式[,模式]文件名 +:添加-:取消=:赋予并取消其他所有 数字形式即由三位八进制数字组成,其命令格式为: chmod八进制模式 文件名 文件的特殊权限: SUID、 SGID 和Sticky 4、文件的链接: (文件和目录名自拟、自行设计实验步骤) (1)硬链接:不带选项,ln命令创建硬链接。在另外的目录或本目录中增加目标文件的一个目录项,一个文件就登记在多个目录中 1n源文件目标文件 (2)软链接(符号链接):用“1n -s”命令建立符号链接时,最好源文件用绝对路径名,这样可以在任何工作目录下进行符号链接。类似于Windows系统中的快捷方式。 In -s源文件目标文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值