搜索
首页系统教程LINUX华为云完成Linux内核的编译与安装(自选题目)

实验要求把握Linux内核的编译与安装把握Linux系统调用基本概念设计和添加linux系统调用

(1)更改或返回指定进程的优先级(nice值和prio值)(详见教材P328)提示:可能参考的内核函数:set_user_nice().

(2)改变主机名称为自定义字符串(自选题目)

1、Linux内核的编译与安装(使用华为云,完成openEuler内核的编译与安装)

(1)登入系统并查看当前内核版本

[root@openEuler~]#uname-r

(2)安装工具,建立开发环境

[root@openEuler~]#yumgroupinstall-y"DevelopmentTools"

[root@openEuler~]#yuminstall-ybc

[root@openEuler~]#yuminstall-yopenssl-devel

(3)备份boot目录以防后续步骤更新内核失败

[root@openEuler~]#tarczvfboot.origin.tgz/boot/

保存当前内核版本信息

[root@openEuler~]#uname–r>uname_r.log

(4)获取内核源代码并解压

[root@openEuler~]#wget

[root@openEuler~]#unzipkernel-4.19.zip

(5)编译内核

[root@openEuler~]#cdkernel-kernel-4.19

[root@openEulerkernel]#makeopeneuler_defconfig

[root@openEulerkernel]#make-j4Imagemodulesdtbs

这一步是编译内核的Image、modules和dtbs,make-j4表示4个线程编译(可以按照CPU核数调整)

(6)安装内核

[root@openEulerkernel]#makemodules_install

[root@openEulerkernel]#makeinstall

注意:在最后一步“makeinstall”时出现的错误在这儿可以忽视。

(7)以VNC登陆ECS

(8)重启系统

[root@openEulerkernel]#reboot

(9)登陆并验证

在VNC窗口中选择以新编译下来的内核启动系统

这儿编译完之后早已有了4.19.208版本的新内核,选择该内核登陆

2、掌握Linux系统调用基本概念

调用linux内核函数_linux内核调试方法总结_内核系统调用

Linux系统处理系统调用的流程以及降低系统调用的方式。Linux系统提供了多达几百种的系统调用,为了惟一地标识每一个系统调用,Linux为每位系统调用都设置了一个惟一的编号,称为系统调用号,同时每位系统调用须要一个服务解释器完成其具体功能。

这儿不做过多描述。

(重点是如何添加系统调用!!!)

#define __NR_hello_euler 294
__SYSCALL(__NR_hello_euler, sys_hello_euler)
#undef __NR_syscalls
#define __NR_syscalls 295

asmlinkage long sys_hello_euler(void);

SYSCALL_DEFINE0(hello_euler)
{
	printk(KERN_INFO "xuehao:20273108");
	return 0;
}

重启后

#include 
#include 
#include 
int main()
{
ret = syscall(294);
return 0;
}

3、设计和添加linux系统调用

(1)更改或返回指定进程的优先级(nice值和prio值)(详见教材P328)提示:可能参考的内核函数:set_user_nice().

#define _GNU_SOURCE
#include
#include
#include
#include
int main()
{
	pid_t pid;
	int nicevalue;
	int flag;
	int n=0;
	int p=0;
	int *prio;
	int *nice;
	prio = &p;
	nice = &n;
	printf("请输入pid: n");
	scanf("%d",&pid);
	printf("pid输入成功n请输入nice值:n");
	scanf("%d",&nicevalue);
	printf("nice输入成功n请输入flag(flag为1时修改,为0时查看):n");
	scanf("%d",&flag);
	syscall(295,pid,flag,nicevalue,prio,nice);
	printf("现在的nice为%d,prio为%dn",n,p);
	return 0;
}

(2)改变主机名称为自定义字符串(自选题目)

#define __NR_mysethostname 296
__SYSCALL(__NR_mysethostname,sys_mysethostname)

同理,下边的#define__NR_syscalls296要弄成#define__NR_syscalls297

4、实验总结

(1)你们做实验之前看教程一定要认清楚是x86还是arm构架的呀!!!我就是在这前面栽跟头了重建了三四次华为云

(2)假如用VNC登录时出现以下报错,这么恭喜你,多半是你的内核崩了~我的老师说,只要你手速够快,在重启虚拟机的时侯立刻用VNC重新登录是可以进去的,并且我没成功过,只能重建了n次云主机。

(3)尽管老师给的实验报告里要求VNC登陆调用linux内核函数,但我个人建议使用cloudshell来执行命令。

(4)在初验的时侯,被老师冷不丁问了系统调用里的函数的意义和用法,直接栽跟头了。我会在下边po出一部份内部函数的意义及用法。

1.find_get_pid(pid)

find_get_pid在内核中有不同的命名空间,在各自的命名空间同一个进程pid值可能是不一样的,find_get_pid为了找到在内核态中的我们找寻进程真正的pid

2.set_user_nice(task,nicevalue)

用于设置进程的nice值

3.copy_to_user()

完成内核空间到用户空间的复制,To目标地址linux操作系统版本linux系统,这个地址是用户空间的地址;From源地址,这个地址是内核空间的地址;N即将拷贝的数据的字节数。

假如数据拷贝成功,则返回零;否则,返回没有拷贝成功的数据字节数。

4.copy_from_user()

copy_from_user将name指向的字符串从用户空间拷贝到内核空间,失败返回没有被拷贝的字节数,成功返回0。

5.down_write()

函数down_write()是写者拿来得到读寄信号量sem时调用的,假如该讯号量被读者或写者所持有调用linux内核函数,则对该函数的调用会造成调用者的睡眠,只能在进程上下文使用,用于获取Linux内核读寄信号量中的写锁。

6.memcpy(str1,str2,n)

从储存区str2复制n个字节到储存区str1。

以上是华为云完成Linux内核的编译与安装(自选题目)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:ITcool。如有侵权,请联系admin@php.cn删除
Linux和Windows处理设备驱动程序的区别有什么区别?Linux和Windows处理设备驱动程序的区别有什么区别?Apr 25, 2025 am 12:13 AM

Linux和Windows在处理设备驱动程序上的差异主要体现在驱动管理的灵活性和开发环境上。1.Linux采用模块化设计,驱动可以动态加载和卸载,开发者需深入理解内核机制。2.Windows依赖微软生态,驱动需通过WDK开发并签名认证,开发相对复杂但保证了系统的稳定性和安全性。

比较和对比Linux和Windows的安全模型。比较和对比Linux和Windows的安全模型。Apr 24, 2025 am 12:03 AM

Linux和Windows的安全模型各有优势。Linux提供灵活性和可定制性,通过用户权限、文件系统权限和SELinux/AppArmor实现安全。Windows则注重用户友好性,依赖WindowsDefender、UAC、防火墙和BitLocker保障安全。

Linux和Windows之间的硬件兼容性有何不同?Linux和Windows之间的硬件兼容性有何不同?Apr 23, 2025 am 12:15 AM

Linux和Windows在硬件兼容性上不同:Windows有广泛的驱动程序支持,Linux依赖社区和厂商。解决Linux兼容性问题可通过手动编译驱动,如克隆RTL8188EU驱动仓库、编译和安装;Windows用户需管理驱动程序以优化性能。

Linux和Windows之间虚拟化支持有哪些差异?Linux和Windows之间虚拟化支持有哪些差异?Apr 22, 2025 pm 06:09 PM

Linux和Windows在虚拟化支持上的主要区别在于:1)Linux提供KVM和Xen,性能和灵活性突出,适合高定制环境;2)Windows通过Hyper-V支持虚拟化,界面友好,与Microsoft生态系统紧密集成,适合依赖Microsoft软件的企业。

Linux系统管理员的主要任务是什么?Linux系统管理员的主要任务是什么?Apr 19, 2025 am 12:23 AM

Linux系统管理员的主要任务包括系统监控与性能调优、用户管理、软件包管理、安全管理与备份、故障排查与解决、性能优化与最佳实践。1.使用top、htop等工具监控系统性能,并进行调优。2.通过useradd等命令管理用户账户和权限。3.利用apt、yum管理软件包,确保系统更新和安全。4.配置防火墙、监控日志、进行数据备份以确保系统安全。5.通过日志分析和工具使用进行故障排查和解决。6.优化内核参数和应用配置,遵循最佳实践提升系统性能和稳定性。

很难学习Linux吗?很难学习Linux吗?Apr 18, 2025 am 12:23 AM

学习Linux并不难。1.Linux是一个开源操作系统,基于Unix,广泛应用于服务器、嵌入式系统和个人电脑。2.理解文件系统和权限管理是关键,文件系统是层次化的,权限包括读、写和执行。3.包管理系统如apt和dnf使得软件管理方便。4.进程管理通过ps和top命令实现。5.从基本命令如mkdir、cd、touch和nano开始学习,再尝试高级用法如shell脚本和文本处理。6.常见错误如权限问题可以通过sudo和chmod解决。7.性能优化建议包括使用htop监控资源、清理不必要文件和使用sy

Linux管理员的薪水是多少?Linux管理员的薪水是多少?Apr 17, 2025 am 12:24 AM

Linux管理员的平均年薪在美国为75,000至95,000美元,欧洲为40,000至60,000欧元。提升薪资可以通过:1.持续学习新技术,如云计算和容器技术;2.积累项目经验并建立Portfolio;3.建立职业网络,拓展人脉。

Linux的主要目的是什么?Linux的主要目的是什么?Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服务器操作系统,2.嵌入式系统,3.桌面操作系统,4.开发和测试环境。Linux在这些领域表现出色,提供了稳定性、安全性和高效的开发工具。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。