Rumah > Tutorial sistem > LINUX > teks badan

Huawei Cloud melengkapkan penyusunan dan pemasangan kernel Linux (topik pilihan)

WBOY
Lepaskan: 2024-02-15 12:12:21
ke hadapan
619 orang telah melayarinya

Percubaan memerlukan penguasaan kompilasi dan pemasangan kernel Linux, menguasai konsep asas panggilan sistem Linux, mereka bentuk dan menambah panggilan sistem Linux

(1) Tukar atau kembalikan keutamaan (nilai bagus dan nilai prio) proses yang ditentukan (lihat buku teks P328 untuk butiran) Petua: Fungsi kernel rujukan yang mungkin: set_user_nice().

(2) Tukar nama hos kepada rentetan tersuai (soalan pilihan)

1 Kompilasi dan pemasangan kernel Linux (gunakan Huawei Cloud untuk melengkapkan penyusunan dan pemasangan kernel openEuler)

(1) Log masuk ke sistem dan semak versi kernel semasa

[root@openEuler~]#uname-r

(2) Pasang alatan dan wujudkan persekitaran pembangunan

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

[root@openEuler~]#yuminstall-ybc

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

(3) Sandarkan direktori but sekiranya kemas kini kernel gagal dalam langkah seterusnya

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

Simpan maklumat versi kernel semasa

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

(4) Dapatkan kod sumber kernel dan nyahmampatkannya

[root@openEuler~]#wget

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

(5) Susun kernel

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

[root@openEulerkernel]#makeopeneuler_defconfig

[root@openEulerkernel]#make-j4Imagemodulesdtbs

Langkah ini adalah untuk menyusun imej, modul dan dtbs kernel make-j4 bermaksud kompilasi 4 utas (boleh dilaraskan mengikut bilangan teras CPU)

.

(6) Pasang kernel

[root@openEulerkernel]#makemodules_install

[root@openEulerkernel]#makeinstall

Nota: Ralat yang berlaku semasa langkah terakhir "makeinstall" boleh diabaikan di sini.

(7) Log masuk ke ECS menggunakan VNC

(8) Mulakan semula sistem

[root@openEulerkernel]#reboot

(9) Log masuk dan sahkan

Pilih untuk but sistem dengan kernel yang baru disusun dalam tetingkap VNC

Selepas menyusun di sini, sudah ada kernel baharu versi 4.19.208 Pilih kernel ini untuk log masuk

2. Kuasai konsep asas panggilan sistem Linux

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

Proses panggilan sistem pemprosesan sistem Linux dan cara mengurangkan panggilan sistem. Sistem Linux menyediakan beratus-ratus panggilan sistem Untuk mengenal pasti secara unik setiap panggilan sistem, Linux menetapkan nombor unik untuk setiap panggilan sistem, dipanggil nombor panggilan sistem Pada masa yang sama, setiap panggilan sistem memerlukan perkhidmatan Jurubahasa melaksanakannya fungsi.

Saya tidak akan menerangkan terlalu banyak penerangan di sini.

(Fokus ialah cara menambah panggilan sistem!!!)

#define __NR_hello_euler 294
__SYSCALL(__NR_hello_euler, sys_hello_euler)
#undef __NR_syscalls
#define __NR_syscalls 295
Salin selepas log masuk

asmlinkage long sys_hello_euler(void);
Salin selepas log masuk

SYSCALL_DEFINE0(hello_euler)
{
	printk(KERN_INFO "xuehao:20273108");
	return 0;
}
Salin selepas log masuk

Selepas dimulakan semula

#include 
#include 
#include 
int main()
{
ret = syscall(294);
return 0;
}
Salin selepas log masuk

3. Reka bentuk dan tambah panggilan sistem linux

(1) Tukar atau kembalikan keutamaan (nilai bagus dan nilai prio) proses yang ditentukan (lihat buku teks P328 untuk butiran) Petua: Fungsi kernel rujukan yang mungkin: 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;
}
Salin selepas log masuk

(2) Tukar nama hos kepada rentetan tersuai (soalan pilihan)

#define __NR_mysethostname 296
__SYSCALL(__NR_mysethostname,sys_mysethostname)
Salin selepas log masuk

Begitu juga, #define__NR_syscallls296 di bawah hendaklah ditukar kepada #define__NR_syscallls297

4. Ringkasan percubaan

(1) Sebelum anda melakukan eksperimen, anda mesti mengenal pasti dengan jelas sama ada ia x86 atau seni bina lengan selepas menonton tutorial! ! ! Di sinilah saya tersandung dan membina semula Huawei Cloud tiga atau empat kali

(2) Jika ralat berikut berlaku semasa log masuk dengan VNC, tahniah, ia mungkin kerana kernel anda telah ranap~ Guru saya berkata bahawa selagi anda cukup pantas, anda boleh menggunakan VNC untuk log masuk semula serta-merta selepas memulakan semula mesin maya ia boleh dimasukkan, dan saya tidak berjaya membina semula hos awan.

(3) Walaupun laporan makmal yang diberikan oleh guru memerlukan log masuk VNCuntuk memanggil fungsi kernel Linux, saya secara peribadi mengesyorkan menggunakan cloudshell untuk melaksanakan arahan.

(4) Semasa ujian awal, guru tiba-tiba bertanya kepada saya tentang maksud dan penggunaan fungsi dalam panggilan sistem, dan saya langsung tersandung. Saya akan siarkan maksud dan penggunaan beberapa fungsi dalaman di bawah.

1.cari_dapat_pid(pid)

find_get_pid mempunyai ruang nama yang berbeza dalam kernel Nilai pid proses yang sama dalam ruang nama masing-masing mungkin berbeza untuk mencari pid sebenar proses dalam keadaan kernel

2.set_user_nice(task,nicevalue)

Digunakan untuk menetapkan nilai bagus proses

3.copy_to_user()

Lengkapkan salinan dari ruang kernel ke ruang pengguna, Untuk menyasarkan alamat sistem operasi linux versi sistem linux, alamat ini adalah alamat ruang pengguna, alamat ini adalah alamat ruang kernel N ialah bilangan bait; data untuk disalin.

Jika salinan data berjaya, kembalikan sifar; jika tidak, kembalikan bilangan bait data yang tidak berjaya disalin.

4.salinan_daripada_pengguna()

copy_from_user menyalin rentetan yang ditunjuk mengikut nama dari ruang pengguna ke ruang kernel Jika ia gagal, ia mengembalikan bilangan bait yang belum disalin Jika ia berjaya, ia mengembalikan 0.

5.down_write()

Fungsi down_write() dipanggil apabila penulis memperoleh semafor baca Jika semaphore dipegang oleh pembaca atau penulismemanggil fungsi kernel linux, panggilan ke fungsi ini akan menyebabkan pemanggil ke Tidur, yang hanya boleh. digunakan dalam konteks proses, digunakan untuk mendapatkan kunci tulis dalam semaphore baca kernel Linux.

6.memcpy(str1,str2,n)

Salin n bait dari kawasan storan str2 ke kawasan storan str1.

Atas ialah kandungan terperinci Huawei Cloud melengkapkan penyusunan dan pemasangan kernel Linux (topik pilihan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:itcool.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!