실험에는 Linux 커널의 컴파일 및 설치, Linux 시스템 호출의 기본 개념 숙달, Linux 시스템 호출 설계 및 추가가 필요합니다
(1) 지정된 프로세스의 우선순위(nice 값 및 prio 값)를 변경하거나 반환합니다(자세한 내용은 교과서 P328 참조) 팁: 가능한 참조 커널 함수: set_user_nice().
(2) 호스트 이름을 사용자 정의 문자열로 변경합니다(선택적 질문)
1. Linux 커널 컴파일 및 설치(Huawei Cloud를 사용하여 openEuler 커널 컴파일 및 설치 완료)
(1) 시스템에 로그인하여 현재 커널 버전을 확인하세요
[root@openEuler~]#uname-r
(2) 도구 설치 및 개발 환경 구축
[root@openEuler~]#yumgroupinstall-y"DevelopmentTools"
[root@openEuler~]#yuminstall-ybc
[root@openEuler~]#yuminstall-yopenssl-devel
(3) 후속 단계에서 커널 업데이트가 실패할 경우를 대비해 부팅 디렉터리를 백업하세요
[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
이 단계는 커널의 이미지, 모듈 및 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는 시스템 호출 번호라고 하는 각 시스템 호출에 대해 고유한 번호를 설정합니다. 동시에 각 시스템 호출에는 인터프리터가 특정 서비스를 완료합니다. 기능.
여기서는 너무 많은 설명을 하지 않겠습니다.
(핵심은 시스템콜 추가 방법!!!)
으아악
으아악
으아악
다시 시작한 후
으아악
3. Linux 시스템 호출 설계 및 추가
(1) 지정된 프로세스의 우선순위(nice 값 및 prio 값)를 변경하거나 반환합니다(자세한 내용은 교과서 P328 참조) 팁: 가능한 참조 커널 함수: set_user_nice().
으아악
(2) 호스트 이름을 사용자 정의 문자열로 변경합니다(선택적 질문)
으아악
마찬가지로 아래 #define__NR_syscalls296을 #define__NR_syscalls297
으로 변경해야 합니다.4. 실험 요약
(1) 실험을 하기 전, 튜토리얼을 보시고 x86인지 arm 아키텍처인지 명확하게 확인하셔야 합니다! ! ! 제가 화웨이 클라우드를 서너 번 헤매고 다시 구축한 곳이 바로 이곳입니다
(2) VNC로 로그인 시 아래와 같은 오류가 발생한다면 축하합니다. 아마도 커널이 충돌했기 때문일 것입니다~ 선생님께서 속도만 빠르면 VNC를 사용하여 재부팅 후 바로 다시 로그인하실 수 있다고 하셨습니다. 가상 머신에 들어갈 수 있는데, 클라우드 호스트를 n번만 재구축할 수 있습니다.
(3) 선생님이 주신 실습 보고서에는 Linux 커널 기능을 호출하려면VNC 로그인이 필요하지만, 저는 개인적으로 cloudshell을 사용하여 명령을 실행하는 것을 권장합니다.
(4) 1차 시험에서 선생님께서 갑자기 시스템 콜에 포함된 기능의 의미와 사용법에 대해 물어보셔서 바로 당황했습니다. 아래에 일부 내부 기능의 의미와 사용법을 포스팅하겠습니다.
1.find_get_pid(pid)
find_get_pid는 커널에서 서로 다른 네임스페이스를 가지고 있습니다. 각 네임스페이스에서 동일한 프로세스의 pid 값은 다를 수 있습니다. Find_get_pid는 커널 상태에서 프로세스의 실제 pid를 찾는 데 사용됩니다.
2.set_user_nice(작업,nice값)프로세스의 좋은 값을 설정하는 데 사용됩니다
3.copy_to_user()
커널 공간에서 사용자 공간으로 복사를 완료합니다. 대상 주소 Linux 운영 체제 버전에서 이 주소는 사용자 공간의 주소입니다. 소스 주소에서 이 주소는 커널 공간의 바이트 수입니다. 복사할 데이터.
데이터 복사가 성공하면 0이 반환되고, 그렇지 않으면 성공적으로 복사되지 않은 데이터 바이트 수가 반환됩니다.
4.copy_from_user()
copy_from_user는 이름이 가리키는 문자열을 사용자 공간에서 커널 공간으로 복사합니다. 실패하면 복사되지 않은 바이트 수를 반환합니다. 성공하면 0을 반환합니다.
5.down_write()
작성기가 읽기 세마포어 sem을 얻을 때 down_write() 함수가 호출됩니다. 세마포어가 리더기나 작가에 의해 유지되는 경우리눅스 커널 함수를 호출하면 이 함수를 호출하면 호출자가 잠자기 상태가 됩니다. 프로세스 컨텍스트에서 사용되며 Linux 커널 읽기 세마포에서 쓰기 잠금을 얻는 데 사용됩니다.
6.memcpy(str1,str2,n)
저장 영역 str2에서 저장 영역 str1로 n바이트를 복사합니다.
위 내용은 Huawei Cloud는 Linux 커널의 컴파일 및 설치를 완료합니다(선택 항목)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!