添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我记得今年的很多笔试面试都遇到了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命令,查看文件是否正常创建:

成功创建如下:
在这里插入图片描述
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

查看文件是否正确写入并保存,正确的话,应该显示结果如下:
在这里插入图片描述

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

4、返回上一层目录,修改./trunk/linux-3.4.x/drivers目录下的Kconfig文件,操作如下,注意目录填自己刚刚第一步创建的文件名:
在这里插入图片描述
同理修改目录下的Makefile文件:
在这里插入图片描述

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可以考虑把那一句注释掉,也可以选择按照这个教程解决。
成功编译结束截图:
在这里插入图片描述
5、查找生成的目标文件
在这里插入图片描述

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

5 实验四

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

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

其中page_alloc.c文件中

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

总体写的比较虎头蛇尾,年末摆烂了两个月(借口新冠后遗症就是“懒癌”啊哈哈哈,请大家保重身体呀,来自一整个寒假都砸咳嗽的选手碎碎念)

Padavan固件研究 一、添加pppoe拔号时lcp echo 开启/关闭 选项 刚开始使用Padavan时,看一看路由器日志,发现里面全部是pppoe已边接,pppoe已断开连接,不断的断线重拔,跳开路由器,换成电脑拔号,不掉线,想应该是路由器器问题,然后百度一下,原来很多华硕路由器都是这样,解释如下: lcp echo 是pppoe连接协议里的一个环节,连接建立好之后,每隔一个时间,客户端或者服务器,会发送一个叫 lcp echo request 的包,收到的一方会回应一个 lcp echo resp
目前本人手上只有这几个设备,所以只测试这几个 PSG1218(k2,超频600,按我的参数编译16-22分钟,〜7.07mb) NEWIFI3(新三,按我的参数编译大约28-35分钟,〜25.5mb,集成了v2二进制文件和frp所以大) G-DOCK(竞斗云2.0,按我的参数编译大概3小时30分钟,〜57mb(ubi包)。)。 编译好的固件最好双清或者品种,opboot,uboot,清除后刷入,防止修改了配置残余 有关参数看设备的配置文件,sh文件,padavan或openwrt对应public.sh文件 固件按理通用编译,但是还需测试,目前测试了的有,coolsnowwolf(雕大)的openwrt(还集成了Lienol的包和openclash,在public.sh里面),chongshengB(C大)
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...
​​本文涉及的Padavan源码如下:https://github.com/hanwckf/rt-n56uhttps://github.com/chongshengB/rt-n56uhttps://github.com/padavanonly/rt-n56uhttps://github.com/immortalwrt/padavan 其中hanwckf的源码最先支持了7915无线芯片,也就是支持了wifi6的机型比如CR660x和JCG Q20/Q10 Pro padavanonly在hanwckf的基础
cd /opt/rt-n56u/trunk 下面是修改内核配置需要做的操作: cp -f configs/boards/<机型名称>/kernel-3.4.x.config linux-3.4.x/.config make -C linux-3.4.x menuconfig menuconfig的配置方法见后文,修改完成后移动回原目录: mv -f linux-3.4... 更新二进制请切换GetPadavanNgSrc为替代双向 编译固件请切换PadavanNgCBuild为替代分支 点击☆Star开始编译编译完成的固件到Actions / Artifact下载) 新建Release开始编译编译完成的固件到Releases下载) 编译脚本默认工具链版本为Rev1(不支持符号) 更新工具链时请修改编译脚本工具链版本 解包之后,修改 可以把解包之后的文件,复制出来,进windows修改,换回去时,注意文件权限。比较文件差异用Beyond Compare方便 也可以直接在ubuntu系统下修改,文件比较安装meld 重新打包命令 ./modify.sh c newrom.trx modprobe cifs CIFSMaxBufSize=64512 mkdir ssk1 ssk6 ssk7 mount -t cifs //192.168.2.1/SSK_usb1_7 /media/ssk7/ -o username=guest mount -t cifs //192.168.2.1/SSK_usb1_1 /media/ssk1/ -o username=guest mount -t ci
Linux在相应用户下,用crontab -l 命令可以查看该用户定时执行的任务,-e可以编辑,但是其真实文件在哪儿呢?? 以CentOS为例,其真实的位置在:/var/spool/cron下面,有执行定时任务的用户将会有以该用户命名的一个文档,vim该文档与用命令crontab -l看到的一样。 crontab命令 crontab命令用于安装、删除或者列出用于驱动cron后台进程的
STM32烧录错误【PDSC: Sequence Execution failed error-Debug access failed - cannot read address 0xE00FFFE】