Download presentation
Presentation is loading. Please wait.
Published byJunior Brandon Robinson Modified over 9 years ago
1
National Taiwan University OS Project 0 & 1 Advisor: Dr. Chih-Wen Hsueh Student: Tang-Hsun Tu 台灣大學 網媒所 / 資工所 Wireless Networking and Embedded Systems Laboratory Real-Time System Software Group December 21, 2015
2
National Taiwan University Tang-Hsun Tu /552 Linux Installation Linux Kernel Compilation System Call Outline
3
National Taiwan University Linux Installation
4
National Taiwan University Tang-Hsun Tu /554 Including shells, libraries, tools, compiler, servers, applications. Ubuntu, Redhat, Fedora, Mandrake, SuSE, Debian, Ubuntu, Gentoo… Live CDs You can make your own Linux distribution This slide is based on Ubuntu 10.04 LTS Linux Distribution
5
National Taiwan University Tang-Hsun Tu /555 Modify the boot sequence to boot your computer from CD-ROM Make sure your hardware and device A clear head and relaxed mind Some drinks and food Before Installation
6
National Taiwan University Tang-Hsun Tu /556
7
National Taiwan University Tang-Hsun Tu /557
8
National Taiwan University Tang-Hsun Tu /558 /dev/hda, /dev/hdb, /dev/hdc, … /dev/hda1, /dev/hda2, … /dev/sda, /dev/scd0, … Mount Points / /swap … Disks and Partitions
9
National Taiwan University Tang-Hsun Tu /559 Swap partition is usually twice as RAM when it is less than 1GB No more than four primary partition including root partition and swap partition If four isn’t enough, use extend partition Make sure all your mount points are correct Partition Division
10
National Taiwan University Tang-Hsun Tu /5510
11
National Taiwan University Tang-Hsun Tu /5511
12
National Taiwan University Tang-Hsun Tu /5512
13
National Taiwan University Tang-Hsun Tu /5513 After dividing partitions, you only need to click your mouse. After installation, reboot and enjoy your Linux! Installation by text mode is the same as graphic mode End of Installation
14
National Taiwan University Tang-Hsun Tu /5514 鳥哥的私房菜 http://linux.vbird.org/ Ubuntu 正體中文站 http://www.ubuntu-tw.org/ Ubuntu Homepage http://www.ubuntu.com/ Reference
15
National Taiwan University Linux Kernel Compilation
16
National Taiwan University Tang-Hsun Tu /5516 Kernel is the core of an operating system. Scheduler, task management, memory management, … You need to compile kernel source code to binary in order to run. What is Linux Kernel?
17
National Taiwan University Tang-Hsun Tu /5517 You can configure your Linux by compiling a new kernel. Add new features, ex. patch kernel. Support new hardware. Disable functions you don’t need. Develop your own kernel.... When Should We Compile Kernel?
18
National Taiwan University Tang-Hsun Tu /5518 Kernel Website, http://www.kernel.orghttp://www.kernel.org You also can download the source from Ubuntu. Where to D/L Linux Kernel?
19
National Taiwan University Tang-Hsun Tu /5519 You need to be root to compile kernel sudo -i Download the necessary tools apt-get update apt-get install kernel-package gcc libncurses5-dev automake gcc libc6-dev build-essential Go to System/Administration/synaptic package Manager or http://www.kernel.org/http://www.kernel.org/ Get the kernel source code e.g. 2.6.35.5 Prepare Your Kernel Source Code
20
National Taiwan University Tang-Hsun Tu /5520 Unzip kernel source code. cd /usr/src tar jxvf linux-source-2.6.X.tar.bz2 You may have many versions of Linux source codes. Prepare Your Kernel Source Code (Cont)
21
National Taiwan University Tang-Hsun Tu /5521 There are many ways to configure. make config make menuconfig make xconfig... If you do not know how to configure, you can copy the old config file from /boot. make mrproper cp /boot/config-`uname -r`.config make menuconfig Configure your Kernel
22
National Taiwan University Tang-Hsun Tu /5522 Configure your Kernel (Cont)
23
National Taiwan University Tang-Hsun Tu /5523 If you meet some problems (SATA) Device Drivers ---> SCSI device support ---> SCSI device support SCSI disk support Device Drivers ---> SCSI device support ---> SCSI low-level drivers ---> [*] Serial ATA (SATA) support Configure your Kernel (Cont)
24
National Taiwan University Tang-Hsun Tu /5524 #make clean #make bzImage #make modules #make modules_install #make install #mkinitramfs –o /boot/initrd.img-2.6.x 2.6.x Kernel Compilation
25
National Taiwan University Tang-Hsun Tu /5525 See how many cores/hyperthreading on your machine cat /proc/cpuinfo | grep processor | wc –l e.g. 8 Compile with the number of jobs make –j8 bzImage make –j8 modules... Speed up Kernel Compilation
26
National Taiwan University Tang-Hsun Tu /5526 Setup your boot manager. vim /boot/grub/menu.lst Add the following section (Grub1): title Ubuntu 10.04 LTS, kernel 2.6.35.5 uuid xxxx kernel /boot/vmlinuz-2.6.35.5 root=UUID=xxxx ro splash initrd /boot/initrd.img-2.6.35.5 Configure your Boot Menu
27
National Taiwan University Tang-Hsun Tu /5527 Setup your boot manager. vim /boot/grub/grub.cfg Add the following section (Grub2): Configure your Boot Menu (Cont)
28
National Taiwan University Tang-Hsun Tu /5528 Install ssh server apt-get install ssh A ssh client on Windows. http://ntu.csie.org/~piaip/pietty/ Some Useful Tools
29
National Taiwan University Tang-Hsun Tu /5529 鳥哥的私房菜 http://linux.vbird.org/ Google http://www.google.com/ Reference
30
National Taiwan University System Call
31
National Taiwan University Tang-Hsun Tu /5531 System call is the mechanism used by an application program to request service from the OS. Users can use it to communicate with kernel. Here are two approaches developing our own system calls Using kernel module Modify the source code of linux directly Introduction
32
National Taiwan University Tang-Hsun Tu /5532 Building system calls in kernel module is more flexible than modifying kernel. When we want to use our system call, just install our kernel modules; and if we don’t need it right away, just remove modules. Modifying kernel is not necessary. (But you still need to modify your kernel for O.S. project one.) Using Kernel Module
33
National Taiwan University Tang-Hsun Tu /5533 For sys_call_table, your should extern it in a file such as /arch/x86/kernel/i386_ksyms_32.c. Export sys_call_table extern void* sys_call_table[]; /*variable should be exported. */ EXPORT_SYMBOL(sys_call_table); 01 02 03
34
National Taiwan University Tang-Hsun Tu /5534 sys_call_table is read-only after kernel version 2.6.23. If you really want to try this method using kernel version which is higher than 2.6.23, you will have to modify your current kernel source and recompile it. Export sys_call_table (Cont)
35
National Taiwan University Tang-Hsun Tu /5535 Firstly, check your compiled kernel version uname –a In x86 32bit vim /usr/src/linux-2.6.x/arch/x86/kernel/ entry_32.S.section.rodata, “a” .section.data, “aw” Export sys_call_table (Cont)
36
National Taiwan University Tang-Hsun Tu /5536 In x86 64bit vim /usr/src/linux- 2.6.x/arch/x86/kernel/syscall_64.c line 22: delete the “const” Export sys_call_table (Cont)
37
National Taiwan University Tang-Hsun Tu /5537 Add to export symbol vim /usr/src/linux-2.6.x/kernel/kallsyms.c extern void *sys_call_table; EXPORT_SYMBOL(sys_call_table); Export sys_call_table (Cont)
38
National Taiwan University Tang-Hsun Tu /5538 vim makefile vim myservice.c Write Your Makefile
39
National Taiwan University Tang-Hsun Tu /5539 Include and Define Extern the “sys_call_table” Write your own system call Write Kernel Module #include /* We're doing kernel work */ #include #define __NR_mysyscall 200 /* define the number of our system call */ 01 02 03 typedef void (*sys_call_ptr_t)(void); extern sys_call_ptr_t sys_call_table[]; sys_call_ptr_t orig_sys_call; 01 02 03 /* Our system call */ asmlinkage int mysyscall(int n) { printk("enter mysyscall()\n"); return 2*n; } 01 02 03 04 05
40
National Taiwan University Tang-Hsun Tu /5540 Initialize the kernel module Extern the “sys_call_table” Write Kernel Module (Cont) /* Initialize the module - replace the system call */ int init_module() { printk("Insert mysyscall module\n"); orig_sys_call = sys_call_table[__NR_mysyscall]; sys_call_table[__NR_mysyscall] = mysyscall; return 0; } 01 02 03 04 05 06 07 /* Cleanup - unregister the appropriate file from /proc */ void cleanup_module() { printk("Remove mysyscall module\n"); sys_call_table[__NR_mysyscall] = orig_sys_call; } 01 02 03 04 05
41
National Taiwan University Tang-Hsun Tu /5541 Compile make Insert the module to kernel insmod./myservice.ko Remove the module from kernel rmmod myservice List the modules in kernel lsmod Use Kernel Module
42
National Taiwan University Tang-Hsun Tu /5542 Write an application to use your system call vim ap.c Compile and execute gcc ap.c –o ap./ap 10 User Application #include #define _GNU_SOURCE #include #define __NR_mysyscall 200 int main(int argc,char *argv[]) { printf("%d\n", syscall(__NR_mysyscall, atoi(argv[1]))); return 0; } 01 02 03 04 05 06 07 08 09 10 11 12 13
43
National Taiwan University Tang-Hsun Tu /5543 Here are two approaches developing our own system calls Using kernel module Modify the source code of Linux directly Build Your Own System Calls
44
National Taiwan University Tang-Hsun Tu /5544 Create a new file in /usr/src/linux- 2.6.x/kernel/ vim myservice.c Add your system call Write Your System Call #include asmlinkage int sys_myservice(int arg1) { printk("my service is invoked!\n"); return arg1 * 10; } 01 02 03 04 05 06 07 08
45
National Taiwan University Tang-Hsun Tu /5545 In x86 32bit /usr/src/linux-2.6.x/arch/x86/include/asm/ unistd_32.h The index must be the last in the list e.g. #define __NR_myservice 338 Write Your System Call (Cont) - x86_32
46
National Taiwan University Tang-Hsun Tu /5546 Create an entry (function name) in system call table /usr/src/linux-2.6.x/arch/x86/kernel/ syscall_table_32.S.long sys_myservice Write Your System Call (Cont) - x86_32
47
National Taiwan University Tang-Hsun Tu /5547 In x86 64bit /usr/src/linux-2.6.x/arch/x86/include/asm/ unistd_64.h The index must be the last in the list #define __NR_myservice 300 __SYSCALL(__NR_myservice, sys_myservice) Write Your System Call (Cont) - x86_64
48
National Taiwan University Tang-Hsun Tu /5548 Define the prototype /usr/src/linux-2.6.x/include/linux/syscalls.h #define asmlinkage int sys_myservice(int arg1); Write Your System Call (Cont)
49
National Taiwan University Tang-Hsun Tu /5549 Add to makefile to compile vim /usr/linux-2.6.x/kernel/Makefile obj-y += myservice.o Now, you can recompile your kernel Write Your System Call (Cont)
50
National Taiwan University Tang-Hsun Tu /5550 Write an application to use your system call vim ap.c Compile and execute gcc ap.c –o ap./ap 10 User Application #include #define _GNU_SOURCE #include #define __NR_myservice 300 int main(int argc,char *argv[]) { printf("%d\n", syscall(__NR_myservice, atoi(argv[1]))); return 0; } 01 02 03 04 05 06 07 08 09 10 11 12 13
51
National Taiwan University Tang-Hsun Tu /5551 Since we want measure the number of sent signals and called sys_kill(), we might need to add a counter to system call “kill()” in /usr/src/Linux-2.6.x/kernel/signal.c. e.g. int nr_kills; If you want to use this variable in your system call or kernel module, you have to export it. EXPORT_SYMBOL(nr_kills); printk can print messages in kernel, use dmesg to check. Hints
52
National Taiwan University Tang-Hsun Tu /5552 Results Hints (Cont) 1. 2. 3.
53
National Taiwan University Tang-Hsun Tu /5553 LXR, http://rswiki.csie.org/lxr/http/sourcehttp://rswiki.csie.org/lxr/http/source Some Useful Tool
54
National Taiwan University Tang-Hsun Tu /5554 Manpages apt-get install manpages-dev Some Useful Tool (Cont)
55
National Taiwan University Tang-Hsun Tu /5555 Kernel Website http://www.kernel.org LXR http://rswiki.csie.org/lxr/http/source http://lxr.linux.no/linux/ Google http://www.google.com/ Reference
56
National Taiwan University Tang-Hsun Tu /5556 Q & A
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.