国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

軟件課設(shè)(Ⅲ)——padavan-ng編譯以及內(nèi)核模塊修改

這篇具有很好參考價(jià)值的文章主要介紹了軟件課設(shè)(Ⅲ)——padavan-ng編譯以及內(nèi)核模塊修改。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

我記得今年的很多筆試面試都遇到了linux相關(guān)的操作,答題狀況都挺……昂。算是補(bǔ)課吧,正好大四的畢業(yè)實(shí)習(xí)、軟3還有研0的項(xiàng)目都需要linux的環(huán)境進(jìn)行推進(jìn),記錄一下,聊作紀(jì)念。

實(shí)驗(yàn)要求

  1. 編譯系統(tǒng),下載并提交,驗(yàn)收的時(shí)候,我會(huì)找MIPS板子,讓大家下載驗(yàn)證。
  2. 編譯一個(gè)內(nèi)核模塊,內(nèi)容任選,隨系統(tǒng)提交,要求內(nèi)容可體現(xiàn)在系統(tǒng)日志中。
  3. 編譯一個(gè)應(yīng)用模塊,內(nèi)容任選,以固件形式隨系統(tǒng)提交,要求可在自指定文件中有結(jié)果顯示。
  4. trunk/linux-3.4.x/kernel/sched/core.c 是進(jìn)程相關(guān)的一個(gè)核心文件,同學(xué)們在必要函數(shù)前加注釋,畫出大體調(diào)度流程。
    trunk/linux-3.4.x/mm/page_alloc.c 是內(nèi)存管理相關(guān)的一個(gè)核心文件,同學(xué)們在必要函數(shù)前加注釋,畫出大體分配流程。

1 虛擬機(jī)的安裝以及環(huán)境配置

不一定非要是老師給的MV系統(tǒng),但是ubuntu的版本建議用老師給的版本,不然可能安裝過程會(huì)有一些比較頭疼的事情。
但是老師給的是無圖形界面的,對于大部分剛接觸的同學(xué)而言,確實(shí)不夠友好。所以這里也可以安裝同版本的帶UI版本。
我自己的話,是按照老師的流程走的,主要是當(dāng)時(shí)虛擬機(jī)裝了兩個(gè),內(nèi)存不允許我再折騰UI版本的了??。

2 實(shí)驗(yàn)一:編譯系統(tǒng)

這個(gè)沒什么好說的,就是按照老師給的流程走一遍,注意有一些包的安裝,如果在編譯的過程中報(bào)錯(cuò)說缺包,復(fù)制出錯(cuò)語句,搜索一下相關(guān)安裝命令即可。

3 實(shí)驗(yàn)二

1、首先進(jìn)入項(xiàng)目目錄中的/trunk/linux-3.4.x/drivers目錄下,新建一個(gè)自己的內(nèi)核工程文件

cd ./trunk/linux-3.4.x/drivers    # 進(jìn)入drivers目錄
mkdir ghykernel					# 新建自己的工程目錄,這里我起名為ghykernel

2、接著,進(jìn)入該目錄,新建三個(gè)工程文件xx.c,Kconfig,Makefile

cd ghykernel
touch ghykernel.c Kconfig Makefile # 第一個(gè).c文件名稱不限,Kconfig和Makefile需要嚴(yán)格按照這個(gè)名稱,后面編譯需要

接著可以在命令行輸入ls命令,查看文件是否正常創(chuàng)建:

ls

成功創(chuàng)建如下:
padavan編譯插件,linux,服務(wù)器,ubuntu
3、接下來我們需要給三個(gè)文件分別寫入相應(yīng)的內(nèi)容:

  • 首先寫入.c文件
vi ghykernel.c #進(jìn)入文件的讀寫模式,同時(shí)回車后需要按下鍵盤上的”I“進(jìn)入插入模式

像Windows一樣寫入文件即可
ghykernel.c內(nèi)容如下:

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

//內(nèi)核模塊參數(shù),加載時(shí)指定或者動(dòng)態(tài)指定,以控制此模塊的行為
static char *name ="GHY";
module_param(name,charp,S_IRUGO);
NODULE_PARAM_DESC(name,"---------now it is a print test---------");

//初始化函數(shù),在加載時(shí)調(diào)用,分配資源準(zhǔn)備執(zhí)行環(huán)境
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;

}

//析構(gòu)函數(shù),在卸載時(shí)調(diào)用,回收資源,銷毀執(zhí)行環(huán)境
static void __exit ghy_print_exit(void){
	printk(KERN_INFO "TESTING: kernel test exit for %s \n",name);
}

//登記初始化函數(shù)和析構(gòu)函
module_init(ghy_print_init);
module_exit(ghy_print_exit);

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

cat ghykernel.c

查看文件是否正確寫入并保存,正確的話,應(yīng)該顯示結(jié)果如下:
padavan編譯插件,linux,服務(wù)器,ubuntu

  • 接著寫入Kconfig文件
    步驟同上,寫入的內(nèi)容如下:
config GHY_KERNEL
		tristate "HELLO GHY_KERNEL"
		default y
  • 最后寫入Makefile文件
    步驟同上,寫入的內(nèi)容如下:
obj-y += ghykernel.o

4、返回上一層目錄,修改./trunk/linux-3.4.x/drivers目錄下的Kconfig文件,操作如下,注意目錄填自己剛剛第一步創(chuàng)建的文件名:
padavan編譯插件,linux,服務(wù)器,ubuntu
同理修改目錄下的Makefile文件:
padavan編譯插件,linux,服務(wù)器,ubuntu

4 實(shí)驗(yàn)三

1、進(jìn)入./trunk/user目錄下,創(chuàng)建文件夾:

mkdir ghyapp

2、進(jìn)入該目錄下,創(chuàng)建兩個(gè)文件.c和Makefile

touch main.c Makefile

3、在創(chuàng)建的文件中寫入內(nèi)容,注意內(nèi)容涉及文件名的要用自己第一步創(chuàng)建的文件名
main.c的內(nèi)容:

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

}	

Makefile的內(nèi)容:

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、實(shí)驗(yàn)二和實(shí)驗(yàn)三一起編譯,首先返回上層的./trunk目錄,輸入

./build_firmware.sh

如果報(bào)錯(cuò)error: expected ‘)’ before string constant可以考慮把那一句注釋掉,也可以選擇按照這個(gè)教程解決。
成功編譯結(jié)束截圖:
padavan編譯插件,linux,服務(wù)器,ubuntu
5、查找生成的目標(biāo)文件
padavan編譯插件,linux,服務(wù)器,ubuntu

  • 進(jìn)入./trunk/romfs/bin文件夾,查看自己實(shí)驗(yàn)三命名的app的c文件編譯結(jié)構(gòu)是否出現(xiàn)在這里
  • 輸入rz [文件名]即可將結(jié)果保存至本機(jī)
    padavan編譯插件,linux,服務(wù)器,ubuntu
    同理進(jìn)入./trunk/images目錄,將總的結(jié)果文件傳輸回來本機(jī)
    padavan編譯插件,linux,服務(wù)器,ubuntu

5 實(shí)驗(yàn)四

這里主要是內(nèi)核模塊自己看懂,當(dāng)然結(jié)合一些文檔會(huì)更好。
這里我選擇了靜態(tài)代碼分析工具Understand來對源碼進(jìn)行分析:

  • 安裝教程
  • 使用教程

主要是考慮到代碼量太大了(1w+),而且.c文件中主要介紹的是局部實(shí)現(xiàn),沒有全局的概念.
代碼分析工具有很多種,這里我們關(guān)注的是代碼轉(zhuǎn)流程圖,知乎有一個(gè)問題和這個(gè)類似,可以提供更多靈感,但是大部分只支持單個(gè)函數(shù)的分析或者是全局.c文件的嵌套關(guān)系的分析,只能作為一種參考。

其中page_alloc.c文件中

  • __alloc_pages_nodemask()模塊的實(shí)現(xiàn)可以參考【文章】
  • __free_pages()模塊實(shí)現(xiàn)注釋可以參考【文章】,本質(zhì)和linux內(nèi)核中伙伴系統(tǒng)內(nèi)存釋放函數(shù)相似。

總體寫的比較虎頭蛇尾,年末擺爛了兩個(gè)月(借口新冠后遺癥就是“懶癌”啊哈哈哈,請大家保重身體呀,來自一整個(gè)寒假都砸咳嗽的選手碎碎念)文章來源地址http://www.zghlxwxcb.cn/news/detail-781596.html

到了這里,關(guān)于軟件課設(shè)(Ⅲ)——padavan-ng編譯以及內(nèi)核模塊修改的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【嵌入式Linux】編譯應(yīng)用和ko內(nèi)核模塊Makefile使用記錄

    【嵌入式Linux】編譯應(yīng)用和ko內(nèi)核模塊Makefile使用記錄

    在Makefile中,變量的賦值可以使用以下幾種方式: = :最基本的賦值符號(hào),表示簡單的延遲展開(lazy expansion)方式。變量的值將會(huì)在使用變量的時(shí)候進(jìn)行展開。 := :立即展開(immediate expansion)的賦值方式。變量的值在賦值的時(shí)候立即展開,并且在后續(xù)的使用中不再改變。

    2024年02月08日
    瀏覽(24)
  • 編譯linux內(nèi)核模塊時(shí)的make -C M= modules的參數(shù)說明

    ????????在linux下編譯可加載內(nèi)核模塊形成.ko文件的makefile中的核心語句是: 這句是Makefile的規(guī)則:這里的 $(MAKE)就相當(dāng)于make ; -C 選項(xiàng)的作用是指將當(dāng)前工作目錄轉(zhuǎn)移到你所指定的位置,一般都是內(nèi)核源代碼目錄或者內(nèi)核headers目錄,如/usr/include/linux-5.1.1-headers/類似的位置

    2024年02月04日
    瀏覽(17)
  • 壓力測試工具stress-ng交叉編譯

    壓力測試工具stress-ng交叉編譯

    下載源碼,?stress-ng版本有好幾個(gè)版本,不同開源倉庫差別并不太大 https://github.com/ColinIanKing/stress-ng 解壓并進(jìn)入目錄 設(shè)置環(huán)境變量 本次 aarch64-linux-gnu-gcc 進(jìn)行舉例,實(shí)際設(shè)置成你自己的交叉編譯工具即可。 交叉編譯 如果提示沒有aarch64-linux-gnu-gcc的話,如下 使用find命令查找下

    2024年02月12日
    瀏覽(41)
  • EVE-NG模擬器安裝&抓包模塊部署

    EVE-NG模擬器安裝&抓包模塊部署

    EVE-NG(Emulated Virtual Environment-Next Generation)仿真虛擬環(huán)境,是基于Ubuntu Linux系統(tǒng)的虛擬環(huán)境,是一款免費(fèi)且功能強(qiáng)大的網(wǎng)絡(luò)模擬器,是一個(gè)無客戶端的多廠商網(wǎng)絡(luò)仿真軟件,無需安裝各廠商的網(wǎng)絡(luò)模擬器,如思科的Cisco Packet Tracer、華為的ensp、華三的HCL等等,很適合用于網(wǎng)絡(luò)仿真

    2024年02月12日
    瀏覽(19)
  • 交叉編譯Linux下壓力測試工具 - stress-ng

    下載地址:https://fossies.org/linux/privat/stress-ng-0.14.03.tar.gz 如果提示不存在,則可以進(jìn)入到 https://fossies.org/linux/privat,搜索 stress-ng 的最新版本,進(jìn)行下載。 下載源碼 解壓并進(jìn)入目錄 設(shè)置環(huán)境變量 這里拿 aarch64-linux-gnu-gcc 進(jìn)行舉例,實(shí)際設(shè)置成你自己的交叉編譯工具即可。 交叉

    2024年02月11日
    瀏覽(26)
  • kali-進(jìn)行抓包以及aircrack-ng跑包和hashcat跑包

    kali-進(jìn)行抓包以及aircrack-ng跑包和hashcat跑包

    環(huán)境: VMware? Workstation 16 Pro kali-linux-2023.1 64位 python3.9.13 RT3070-USB無線網(wǎng)卡 1.首先按下win+r打開運(yùn)行窗口 2.輸入services.msc,然后按回車鍵即可進(jìn)入服務(wù) 3.找到VMware USB Arbitration Service 右擊啟動(dòng) 4.右鍵虛擬機(jī),設(shè)置,在USB控制器中,勾選USB兼容性2.0以及顯示所有USB輸入設(shè)備 5.打開k

    2024年01月16日
    瀏覽(19)
  • Linux性能測試工具 stress,stress-ng,sysbench,fio以及檢測dstat

    Linux性能測試工具 stress,stress-ng,sysbench,fio以及檢測dstat

    通過man幫助,可以看到官方對dstat的定義為:多功能系統(tǒng)資源統(tǒng)計(jì)生成工具(?versatile tool for generating system resource statistics)。在獲取的信息上有點(diǎn)類似于top、free、iostat、vmstat等多個(gè)工具的合集,官方解釋為vmstat、iostat、ifstat等工具的多功能替代品,且添加了許多額外的功能(

    2024年02月05日
    瀏覽(22)
  • 【linux內(nèi)核】Debian內(nèi)核編譯

    【linux內(nèi)核】Debian內(nèi)核編譯

    列出 Debian 內(nèi)各種版本的核心軟件包 apt安裝軟件包 編譯內(nèi)核源碼 安裝內(nèi)核 更新grub 參考: 8.10.?編譯內(nèi)核 (debian.org) Debian編譯內(nèi)核教程 - 時(shí)光旅行的懶貓 - 博客園 (cnblogs.com) 內(nèi)核編譯方法-tony_ayuan-ChinaUnix博客

    2024年02月17日
    瀏覽(48)
  • 內(nèi)核編譯-Pixel 6設(shè)備Android 13系統(tǒng)編譯gki內(nèi)核并整合KernelSU

    內(nèi)核編譯-Pixel 6設(shè)備Android 13系統(tǒng)編譯gki內(nèi)核并整合KernelSU

    為Pixel6編譯內(nèi)核,需要增加一些配置,和集成 KernelSU 。 vm Ubuntu 22.04 500g-24g內(nèi)存 默認(rèn)狀態(tài): 編譯成功刷入真機(jī)后: 下載內(nèi)核 以下操作前提:具備全球通上網(wǎng) 以下操作前提:具備全球通上網(wǎng) 以下操作前提:具備全球通上網(wǎng) 參考官方文檔通用內(nèi)核映像 (GKI) 發(fā)布 build | Android 開

    2024年02月16日
    瀏覽(22)
  • WSL2編譯內(nèi)核并更改替換內(nèi)核版本

    WSL2編譯內(nèi)核并更改替換內(nèi)核版本

    WSL2支持完整的,并且支持微軟官方優(yōu)化的內(nèi)核,因此可以使用微軟官方提供的內(nèi)核代碼進(jìn)行自主編譯。 點(diǎn)擊右側(cè)的 releases 可以發(fā)現(xiàn)微軟官方目前已經(jīng)發(fā)行的 WSL2-Linux-Kernel 一系列版本。 本次教程,以 linux-msft-wsl-5.15.57.1 在Ubuntu 22.04.1 LTS為例 為了順利編譯內(nèi)核,我們需要事先

    2024年02月07日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包