软件课设(Ⅲ)——padavan-ng编译以及内核模块修改

这篇具有很好参考价值的文章主要介绍了软件课设(Ⅲ)——padavan-ng编译以及内核模块修改。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我记得今年的很多笔试面试都遇到了linux相关的操作,答题状况都挺……昂。算是补课吧,正好大四的毕业实习、软3还有研0的项目都需要linux的环境进行推进,记录一下,聊作纪念。

实验要求

  1. 编译系统,下载并提交,验收的时候,我会找MIPS板子,让大家下载验证。
  2. 编译一个内核模块,内容任选,随系统提交,要求内容可体现在系统日志中。
  3. 编译一个应用模块,内容任选,以固件形式随系统提交,要求可在自指定文件中有结果显示。
  4. trunk/linux-3.4.x/kernel/sched/core.c 是进程相关的一个核心文件,同学们在必要函数前加注释,画出大体调度流程。
    trunk/linux-3.4.x/mm/page_alloc.c 是内存管理相关的一个核心文件,同学们在必要函数前加注释,画出大体分配流程。

1 虚拟机的安装以及环境配置

不一定非要是老师给的MV系统,但是ubuntu的版本建议用老师给的版本,不然可能安装过程会有一些比较头疼的事情。
但是老师给的是无图形界面的,对于大部分刚接触的同学而言,确实不够友好。所以这里也可以安装同版本的带UI版本。
我自己的话,是按照老师的流程走的,主要是当时虚拟机装了两个,内存不允许我再折腾UI版本的了😅。

2 实验一:编译系统

这个没什么好说的,就是按照老师给的流程走一遍,注意有一些包的安装,如果在编译的过程中报错说缺包,复制出错语句,搜索一下相关安装命令即可。

3 实验二

1、首先进入项目目录中的/trunk/linux-3.4.x/drivers目录下,新建一个自己的内核工程文件

cd ./trunk/linux-3.4.x/drivers    # 进入drivers目录
mkdir ghykernel					# 新建自己的工程目录,这里我起名为ghykernel

2、接着,进入该目录,新建三个工程文件xx.c,Kconfig,Makefile

cd ghykernel
touch ghykernel.c Kconfig Makefile # 第一个.c文件名称不限,Kconfig和Makefile需要严格按照这个名称,后面编译需要

接着可以在命令行输入ls命令,查看文件是否正常创建:

ls

成功创建如下:
padavan编译插件,linux,服务器,ubuntu
3、接下来我们需要给三个文件分别写入相应的内容:

  • 首先写入.c文件
vi ghykernel.c #进入文件的读写模式,同时回车后需要按下键盘上的”I“进入插入模式

像Windows一样写入文件即可
ghykernel.c内容如下:

#include<linux/module.h>
MODULE_LICENSE("MIT");
MODULE_AUTHOR("GHY");
MODULE_DESCRIPTION("KERNEL EDIT EXAMINATION");
MODULE_VERSION("1.0");

//内核模块参数,加载时指定或者动态指定,以控制此模块的行为
static char *name ="GHY";
module_param(name,charp,S_IRUGO);
NODULE_PARAM_DESC(name,"---------now it is a print test---------");

//初始化函数,在加载时调用,分配资源准备执行环境
static int __init ghy_print_init(void){
	printk(KERN_INFO "TESTING: test case written by %s,this is kernel edit module\n",name);
	return 0;

}

//析构函数,在卸载时调用,回收资源,销毁执行环境
static void __exit ghy_print_exit(void){
	printk(KERN_INFO "TESTING: kernel test exit for %s \n",name);
}

//登记初始化函数和析构函
module_init(ghy_print_init);
module_exit(ghy_print_exit);

退出插入模式需要先按下Esc键,再按下:键,输入wq即可,再在命令行输入

cat ghykernel.c

查看文件是否正确写入并保存,正确的话,应该显示结果如下:
padavan编译插件,linux,服务器,ubuntu

  • 接着写入Kconfig文件
    步骤同上,写入的内容如下:
config GHY_KERNEL
		tristate "HELLO GHY_KERNEL"
		default y
  • 最后写入Makefile文件
    步骤同上,写入的内容如下:
obj-y += ghykernel.o

4、返回上一层目录,修改./trunk/linux-3.4.x/drivers目录下的Kconfig文件,操作如下,注意目录填自己刚刚第一步创建的文件名:
padavan编译插件,linux,服务器,ubuntu
同理修改目录下的Makefile文件:
padavan编译插件,linux,服务器,ubuntu

4 实验三

1、进入./trunk/user目录下,创建文件夹:

mkdir ghyapp

2、进入该目录下,创建两个文件.c和Makefile

touch main.c Makefile

3、在创建的文件中写入内容,注意内容涉及文件名的要用自己第一步创建的文件名
main.c的内容:

#include<stdio.h>
int main(){
	printf("-----This is a TEST for APP----\n");
	//只要是c++在stdio.h支持下的代码都可以丢进去
	return 0;

}	

Makefile的内容:

CFLAGS += -ffunction-sections -fdata-sections -fPIC -std=gnu99
LDFLAGS += -Wl,--gc-sections

all : main.o Makefile
	$(CC) -o ghyapp main.o $(LDFLAGS)

main.o : main.c
	$(CC) -c main.c $(CFLAGS)

clean :
	rm -f main.o

clean-all :
	rm -f ghyapp *.o

romfs:
	$(ROMFSINST) ghyapp /bin/ghyapp

4、实验二和实验三一起编译,首先返回上层的./trunk目录,输入

./build_firmware.sh

如果报错error: expected ‘)’ before string constant可以考虑把那一句注释掉,也可以选择按照这个教程解决。
成功编译结束截图:
padavan编译插件,linux,服务器,ubuntu
5、查找生成的目标文件
padavan编译插件,linux,服务器,ubuntu

  • 进入./trunk/romfs/bin文件夹,查看自己实验三命名的app的c文件编译结构是否出现在这里
  • 输入rz [文件名]即可将结果保存至本机
    padavan编译插件,linux,服务器,ubuntu
    同理进入./trunk/images目录,将总的结果文件传输回来本机
    padavan编译插件,linux,服务器,ubuntu

5 实验四

这里主要是内核模块自己看懂,当然结合一些文档会更好。
这里我选择了静态代码分析工具Understand来对源码进行分析:

  • 安装教程
  • 使用教程

主要是考虑到代码量太大了(1w+),而且.c文件中主要介绍的是局部实现,没有全局的概念.
代码分析工具有很多种,这里我们关注的是代码转流程图,知乎有一个问题和这个类似,可以提供更多灵感,但是大部分只支持单个函数的分析或者是全局.c文件的嵌套关系的分析,只能作为一种参考。

其中page_alloc.c文件中

  • __alloc_pages_nodemask()模块的实现可以参考【文章】
  • __free_pages()模块实现注释可以参考【文章】,本质和linux内核中伙伴系统内存释放函数相似。

总体写的比较虎头蛇尾,年末摆烂了两个月(借口新冠后遗症就是“懒癌”啊哈哈哈,请大家保重身体呀,来自一整个寒假都砸咳嗽的选手碎碎念)文章来源地址https://www.toymoban.com/news/detail-781596.html

到了这里,关于软件课设(Ⅲ)——padavan-ng编译以及内核模块修改的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【嵌入式Linux】编译应用和ko内核模块Makefile使用记录

    在Makefile中,变量的赋值可以使用以下几种方式: = :最基本的赋值符号,表示简单的延迟展开(lazy expansion)方式。变量的值将会在使用变量的时候进行展开。 := :立即展开(immediate expansion)的赋值方式。变量的值在赋值的时候立即展开,并且在后续的使用中不再改变。

    2024年02月08日
    浏览(50)
  • 编译linux内核模块时的make -C M= modules的参数说明

            在linux下编译可加载内核模块形成.ko文件的makefile中的核心语句是: 这句是Makefile的规则:这里的 $(MAKE)就相当于make ; -C 选项的作用是指将当前工作目录转移到你所指定的位置,一般都是内核源代码目录或者内核headers目录,如/usr/include/linux-5.1.1-headers/类似的位置

    2024年02月04日
    浏览(53)
  • 压力测试工具stress-ng交叉编译

    下载源码, stress-ng版本有好几个版本,不同开源仓库差别并不太大 https://github.com/ColinIanKing/stress-ng 解压并进入目录 设置环境变量 本次 aarch64-linux-gnu-gcc 进行举例,实际设置成你自己的交叉编译工具即可。 交叉编译 如果提示没有aarch64-linux-gnu-gcc的话,如下 使用find命令查找下

    2024年02月12日
    浏览(75)
  • EVE-NG模拟器安装&抓包模块部署

    EVE-NG(Emulated Virtual Environment-Next Generation)仿真虚拟环境,是基于Ubuntu Linux系统的虚拟环境,是一款免费且功能强大的网络模拟器,是一个无客户端的多厂商网络仿真软件,无需安装各厂商的网络模拟器,如思科的Cisco Packet Tracer、华为的ensp、华三的HCL等等,很适合用于网络仿真

    2024年02月12日
    浏览(168)
  • 交叉编译Linux下压力测试工具 - stress-ng

    下载地址:https://fossies.org/linux/privat/stress-ng-0.14.03.tar.gz 如果提示不存在,则可以进入到 https://fossies.org/linux/privat,搜索 stress-ng 的最新版本,进行下载。 下载源码 解压并进入目录 设置环境变量 这里拿 aarch64-linux-gnu-gcc 进行举例,实际设置成你自己的交叉编译工具即可。 交叉

    2024年02月11日
    浏览(38)
  • kali-进行抓包以及aircrack-ng跑包和hashcat跑包

    环境: VMware® Workstation 16 Pro kali-linux-2023.1 64位 python3.9.13 RT3070-USB无线网卡 1.首先按下win+r打开运行窗口 2.输入services.msc,然后按回车键即可进入服务 3.找到VMware USB Arbitration Service 右击启动 4.右键虚拟机,设置,在USB控制器中,勾选USB兼容性2.0以及显示所有USB输入设备 5.打开k

    2024年01月16日
    浏览(47)
  • Linux性能测试工具 stress,stress-ng,sysbench,fio以及检测dstat

    通过man帮助,可以看到官方对dstat的定义为:多功能系统资源统计生成工具( versatile tool for generating system resource statistics)。在获取的信息上有点类似于top、free、iostat、vmstat等多个工具的合集,官方解释为vmstat、iostat、ifstat等工具的多功能替代品,且添加了许多额外的功能(

    2024年02月05日
    浏览(43)
  • 【linux内核】Debian内核编译

    列出 Debian 内各种版本的核心软件包 apt安装软件包 编译内核源码 安装内核 更新grub 参考: 8.10. 编译内核 (debian.org) Debian编译内核教程 - 时光旅行的懒猫 - 博客园 (cnblogs.com) 内核编译方法-tony_ayuan-ChinaUnix博客

    2024年02月17日
    浏览(46)
  • 内核编译-Pixel 6设备Android 13系统编译gki内核并整合KernelSU

    为Pixel6编译内核,需要增加一些配置,和集成 KernelSU 。 vm Ubuntu 22.04 500g-24g内存 默认状态: 编译成功刷入真机后: 下载内核 以下操作前提:具备全球通上网 以下操作前提:具备全球通上网 以下操作前提:具备全球通上网 参考官方文档通用内核映像 (GKI) 发布 build | Android 开

    2024年02月16日
    浏览(44)
  • WSL2编译内核并更改替换内核版本

    WSL2支持完整的,并且支持微软官方优化的内核,因此可以使用微软官方提供的内核代码进行自主编译。 点击右侧的 releases 可以发现微软官方目前已经发行的 WSL2-Linux-Kernel 一系列版本。 本次教程,以 linux-msft-wsl-5.15.57.1 在Ubuntu 22.04.1 LTS为例 为了顺利编译内核,我们需要事先

    2024年02月07日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包