Home CentOS הסבר על Linux Kernel וקצת היסטוריה

הסבר על Linux Kernel וקצת היסטוריה

by Tal Ben Shushan 04/09/2017 0 comment
הסבר על Linux Kernel וקצת היסטוריה
נהנתם מהמאמר ? שתפו אותו!

כל הזכויות שמורות לטל בן שושן – Shushan.co.il

Linux Kernel

נתחיל קצת מהיסטוריה,

הLinux Kernel נוצר על ידי לינוס טורוואלדס ב1991 והוא שלח את הקרנל ורשם בהודעה "שלו לכל המשתמשים ב Minix כתחביב הוצאתי מערכת הפעלה חדשה (זה רק תחביב ולכן לא ברמה של GNU) אך התחביב הזה הלך והתרחב והפך לאחת ממערכות ההפעלה הגדולות בעולם ונכון להיום (כל עוד מגדירים את אנדרואיד כמערכת הפעלה לינוקסאית) זו מערכת ההפעלה הגדולה בעולם, לאחר מכן הוא החליט להגדיר את רישיון התוכנה לGPL ובכך הפך אותה לחינמית וכל אחד יכול לערוך את קוד המקור שלה.

לכל מערכת הפעלה יש קרנל, לווינדוס, למקינטוש, ללינוקס המטרה של הקנל זה ל"קשר" בין החומרה לתוכנה, לנהל את כל התהליכים האלו ביעילות ולתקשר עם אפליקציות שמקושרת לקרנל באופן אפקטיבי.
הוא זה שמנהל את התהליכים כמו הזיכרון ה CPU הוא צריך להחליט איפה להניח כל תוכנה בזיכרון וכאשר תוכנה אחרת רוצה את הResources (תהליכים) שתוכנה אחרת משתמשת בה הוא צריך להחליט כמה לתת וכיצד לתת את אותם תהליכים.
על מנת שהקרנל יקושר לחומרה הוא משתמש בדריברים, חלק מהדריברים מגיעים עם הקרנל וחלק מהם צריך להתקין בנפרד ( Kernel Module) למשל כאשר אתם מעוניינים לשנות את הרזולוציה במסך, אתם בעצם משתמשים בתוכנה לשינוי הרזולוציה, התוכנה נאמר של חברת Nvidia שולחת פקודה לKernel וה Kernel משנה את הרזולוציה בהתאם

לאחר שהתקנתם את הקרנל בלבד, מערכת ההפעלה הלינוקסאית לא תעבוד באופן שבו ניתן יהיה לעבוד, על מנת לבצע זאת ולהפוך את ההפצה (מערכת ההפעלה) לניתנת לעבודה יש להוסיף אפליקציות לקרנל ובלינוקס זה קורה על ידי הוספת ה Shell או מה שאתם מכירים בתור Bash אך גם הוא צריך חבילות נוספות על מנת לתפקד כמו vi או vim וcurl או yum ו apt-get וכו'

כעת נעבור על כיצד עובד ה Linux Kernel

נקיש פקודה זו על מנת לראות איזה גירסה של קרנל עובדת כרגע (באתר הרישמי ניתן לראות אתה הגירסאות הקיימות, ההפצה הרישמית של CentOS 7 משתמש בגירסה 3 כרגע לפחות)

[root@localhost ~]# uname -r

3.10.0-514.26.2.el7.x86_64

3.10.0-514.26.2 – "גירסה 3"

3 = גרסת ה Kernel

10 = תת גרסה ראשית, של ה Kernel מה שנקרא ה Major Revision

0 = Minor Revision , תת גרסה משנית של ה Kernel

514 = עדכונים (לא תמיד מופיעה)

לפני גרסאות 2.6 – נאמר גרסה 1.7.4

1 = הגרסה הראשית

7 = הוא אי-זוגי ולכן הוא גרסת פיתוח Dev (אם היה זוגי אז היה גרסה יציבה Stable)

4 = Minor Revision

אחרי גרסת 2.6 – נאמר גרסה 2.6.7

2 = הגרסה הראשית

6 = לא משתנה כמעט רק אם קיים עדכון ממש גדול

7 = הוא Minor Revision שישתנה כל הזמן

כעת יש את גרסת 4.11.6

Longterm = הוא מתוחזק לאורך זמן

על מנת לראות את המודולים – הם הדריברים של הקרנל

כעת נעבור על אפשרויות שונות והסברים נוספים על הקרנל הקישו את הפקודה:

 

[root@localhost ~]# cd /lib/modules
 [root@localhost modules]# ls
3.10.0-514.26.2.el7.x86_64 3.10.0-514.el7.x86_64
[root@localhost ~]# cd 3.10.0-514.el7.x86_64
[root@localhost 3.10.0-514.el7.x86_64]# ls
 build modules.builtin modules.modesetting source
 extra modules.builtin.bin modules.networking updates
 kernel modules.dep modules.order vdso
 modules.alias modules.dep.bin modules.softdep weak-updates
 modules.alias.bin modules.devname modules.symbols
 modules.block modules.drm modules.symbols.bin

הדגשתי למעלה את Modules.dep שזה קיצור של modules.dependency הוא למעשה מכיל את כל הרשימה של המודולים (כל הדריברים של מערכת ההפעלה)

אם נקיש את הפקודה: נוכל לראות איזה מודולים מותקנים (איזה דריברים מותקנים)

[root@localhost ~]# lsmod

נאמר ואני רוצה להסיר Module מסוים, כמו הכונן פלופי:

rmmod floppy

נאמר ועכשיו אני רוצה להגדיר אותו מחדש:

insmod floppy

נאמר ואני רוצה לחפש דרייבר מסוים בקרנל, ואני מעוניין דווקא במודל soundcore.ko שהוא כרטיס הקול שלי

*אני רק אדגיש שניתן לחפש בגוגל לגבי מודול מסוים (דריבר מסוים ואז לבצע את הפעולות שאני מסביר כאן)

נחפש אותו

[root@localhost 3.10.0-514.el7.x86_64]# find . | grep soundcore.ko
./kernel/sound/soundcore.ko

נאמר ואני רוצה להסיר את המודול קול

[root@localhost ~]# modprobe -r soundcore

כעת להגדיר אותו או להכניס חזרה את המודול

[root@localhost ~]# modprobe soundcore

בדיקת מה המודול עושה ומה מקורו ושמו, נגלה תחילה מה השם המקורי של הדריבר

[root@localhost ~]# modprobe --resolve-alias soundcore

כעת נקבל את הפלט עם מקור השם, ואז נקיש

 

[root@localhost modules]# modinfo soundcore

התוצאה תיהיה הסבר על הדריבר

PROC

מכיל את המבנה של כל הקרנל, לכן הרבה כלים של דיווח והצגת בעיות, תקלות או מידע מביאות את אותו "מידע" מתוך /proc (נמצא בתיקייה הראשית)

למשל

/proc/31602/net/arp

מכיל בתוכו את טבלת ה ARP בדיוק כמו שאקיש את הפקודה arp -a

כל המבנה וההגדרות של הקרנל יושבות בתיקייה ורובם מוגדרות על 0 או 1 (עובד או לא עובד)


כל קובצי ה קינפוג שאחראים ישירות על עבודת הקרנל לדוגמה,

[root@localhost ~]# cd /proc/sys/kernel/

בתוך תיקייה זו שוכנים חלק מקבצי הקינפוג הבאים: בחרתי כמה על מנת להציג אותם

domainname – מגדיר את הדומיין של המחשב אם קיים

ctrl-alt-del – מגדיר אם סט המקשים האלו מבצע במיידית ריסטארט או ממתין לכך שהמערכת מוכנה לריסטרט ואז מרסט

hostname – מגדיר את שם המחשב של המחשב נאמר tal.com

modprobe  – מגדיר מאיפה טיענו המודולים לקרנל

הנתיב יהיה sbin/modprobe ואם נעבור לנתיב זה נראה את כל המודולים שצריכים להיטען אל הקרנל

panic  – מגדיר לאחר כמה זמן שנקבע מצב זה לבצע ריסטארט למערכת שכן המערכת "תקוע"

printk – אחראי על הדפסת הלוגים וההתראות של הקרנל

את הרשימה המלאה ניתן לקרוא כאן


על מנת לראות מה טעון עכשיו בזיכרון (אילו הגדרות של הקרנל) הקישו את הפקודה:

[root@localhost ~]# sysctl -a

vm.mmap_min_addr = 4096
 vm.nr_hugepages = 0
 vm.nr_hugepages_mempolicy = 0
 vm.nr_overcommit_hugepages = 0
 vm.nr_pdflush_threads = 0
 vm.numa_zonelist_order = default
 vm.oom_dump_tasks = 1
 vm.oom_kill_allocating_task = 0
 vm.overcommit_kbytes = 0
 vm.overcommit_memory = 0
 vm.overcommit_ratio = 50
 vm.page-cluster = 3
 vm.panic_on_oom = 0
 vm.percpu_pagelist_fraction = 0
 vm.stat_interval = 1
 vm.swappiness = 30
 vm.user_reserve_kbytes = 117697
 vm.vfs_cache_pressure = 100
 vm.zone_reclaim_mode = 0

נאמר וההגדרה היא (כמות הזיכרון של קובץ ההחלפה המקסימלי שיהיה שייך לקרנל) אם מעוניינים לשנות ערך זה ניתן לבצע כך:

[root@localhost ~]# sysctl -w vm.overcommit_memory=100

יש מודולים שחסומים ולא יטענו למערכת, הרשימה שלהם נמצאת ב:

 

[root@localhost ~]# cd /usr/lib/modprobe.d/

[root@localhost ~]# vi dist-blacklist.conf

Udev

הוא כלי המחליף את devfs ומטרתו היא להציג את כל החומרה המחוברת כעת למחשב והמטרה שלו היא לבצע Hot-Plug או בקיצור אם חיברתם אוזניות אז Udev יטען את המודל של האוזניות ובכך יציג לכם אותם.


יש כלים שאיתם אפשר לבדוק אילו מהחומרה מחוברת למחשב ולהציג את אותה חומרה, לדוגמה:

[root@localhost ~]# yum install usbutils

lsusb – מציג את כל חיבורי הUSB

lspci- מציג את כל חיבורי הPCI

lsdev – כל הרכיבים שמחוברים למערכת

dmesg – הודעות שאם התחבר רכיב מסוים או התנתק

udevadm monitor- מציג בזמן אמת מה מחובר ומה מתחבר

התקנת Kernel אחר

CentOS 7

כמו שהסברתי בתחילת המאמר יש הרבה גרסאות קרנל את הגרסאות ניתן להוריד מהאתר הרישמי

https://www.kernel.org/

ההפצה שיוצאת יוצאת עם גריסה מסוימת, ניתן להתקין גירסה חדשה יותר (אך זה עלול לפגוע בחלק מהמודולים והאפליקציות הקיימות בהפצה בגלל חוסר התאמה)

נראה כעת כיצד להתקין אוטומטית וכיצד להתקין ידנית



התקנה אוטומטית של הקרנל

נוסיף את מפתח הריפו של CPG

[root@localhost ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

כעת נתקין אותו

[root@localhost ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

נאפשר את הריפו שהוספנו

[root@localhost ~]#  yum install yum-plugin-fastestmirror

כעת נתקין את הקרנל החדש

yum --enablerepo=elrepo-kernel install kernel-ml

בסיום הקרנל החדש יותקן, בצעו ריסטרט ואז בחרו באפשרות החדשה

ואם נבדוק את הגירסה נראה שהגרסה החדשה הותקנה

 

התקנה ידנית של הקרניל

להשיג את הקרנל הרצוי יש להיכנס לאתר

https://www.kernel.org/

נוריד את הגרסה האחרונה ונחלץ אותה בתיקייה usr/src

[root@localhost ~]# tar -Jxvf linux-4.11.6.tar.xz


נכנס לתיקייה

[root@localhost ~]# cd /usr/srv/

נבצע ls

[root@localhost src]# ls
 debug kernels

זו התיקייה בה נעתיק את הקרנל, אל לפני נתקין את כלי הפיתוח

כעת עלינו להתקין את כלי הפיתוח

[root@localhost ~]# yum group install "Development Tools"

תפריט טקסט שבו נוכל לקמפל את הקרנל

[root@localhost ~]# yum install ncurses-devel qt-devel

כעת על ידי winscp נעביר את קובץ ה rar של הקרנל לתיקיית ה usr/src

כעת חלצו את הקובץ על ידי הפקודה

[root@localhost ~]# tar -Jxvf linux-4.11.6.tar.xz

כעת נבצע קומילציה על ידי הפקודה

[root@localhost ~]# make help

כעת יוצג לכם מה ניתן לעשות עם make, אנחנו נבצע ניקוי לקרנל

[root@localhost ~]# clean - Remove most generated files but keep the config and

enough build support to build external modules
mrproper - Remove all generated files + config + various backup files

נרשום את הפקודה

[root@localhost ~]# make mrproper

נוכל להשתמש בפקודה

[root@localhost ~]# make oldconfig

וזה יקח את הגדרות הקרנל שכרגע רצות לנו בcentos 7

[root@localhost ~]# make menuconfig

אנו נבחר בברירת מחדל, נלך ל Save ואז ok, הקובץ ישמר בשם .config

לאחר מכן נלך לexit ונצא מהאשף

לאחר שהגדרנו את הקרנל, ניצור אותו

קודם נתקין BC

[root@localhost ~]# yum install bc

לאחר מכן openssl

[root@localhost ~]# yum install openssl-devel

[root@localhost ~]# make bzImage

[root@localhost ~]# make modules

[root@localhost ~]# make install

בסיום תותקן הגירסה החדשה של הקרנל

מאמרים קשורים

Leave a Comment