Os project 0 1
This presentation is the property of its rightful owner.
Sponsored Links
1 / 56

OS Project 0 & 1 PowerPoint PPT Presentation


  • 83 Views
  • Uploaded on
  • Presentation posted in: General

OS Project 0 & 1. Advisor: Dr. Chih-Wen Hsueh Student: Tang-Hsun Tu 台灣大學 網媒所 / 資工所 Wireless Networking and Embedded Systems Laboratory Real-Time System Software Group October 3, 2014. Linux Installation Linux Kernel Compilation System Call. Outline. Linux Installation.

Download Presentation

OS Project 0 & 1

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Os project 0 1

OS Project 0 & 1

Advisor: Dr. Chih-Wen Hsueh

Student: Tang-Hsun Tu

台灣大學

網媒所/資工所

Wireless Networking and Embedded Systems Laboratory

Real-Time System Software Group

October 3, 2014


Outline

Linux Installation

Linux Kernel Compilation

System Call

Outline

/55


Linux installation

Linux Installation


Linux distribution

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

/55


Before installation

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

/55


Os project 0 1

/55


Os project 0 1

/55


Disks and partitions

/dev/hda, /dev/hdb, /dev/hdc, …

/dev/hda1, /dev/hda2, …

/dev/sda, /dev/scd0, …

Mount Points

/

/swap

Disks and Partitions

/55


Partition division

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

/55


Os project 0 1

/55


Os project 0 1

/55


Os project 0 1

/55


End of installation

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

/55


Reference

鳥哥的私房菜

http://linux.vbird.org/

Ubuntu 正體中文站

http://www.ubuntu-tw.org/

Ubuntu Homepage

http://www.ubuntu.com/

Reference

/55


Linux kernel compilation

Linux Kernel Compilation


What is linux kernel

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?

/55


When should we compile kernel

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?

/55


Where to d l linux kernel

Kernel Website, http://www.kernel.org

You also can download the source from Ubuntu.

Where to D/L Linux Kernel?

/55


Prepare your kernel source code

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/

Get the kernel source code

e.g. 2.6.35.5

Prepare Your Kernel Source Code

/55


Prepare your kernel source code cont

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)

/55


Configure your kernel

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

/55


Configure your kernel cont

Configure your Kernel (Cont)

/55


Configure your kernel cont1

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)

/55


Kernel compilation

#make clean

#make bzImage

#make modules

#make modules_install

#make install

#mkinitramfs –o /boot/initrd.img-2.6.x 2.6.x

Kernel Compilation

/55


Speed up kernel compilation

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

/55


Configure your boot menu

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

/55


Configure your boot menu cont

Setup your boot manager.

vim /boot/grub/grub.cfg

Add the following section (Grub2):

Configure your Boot Menu (Cont)

/55


Some useful tools

Install ssh server

apt-get install ssh

A ssh client on Windows.

http://ntu.csie.org/~piaip/pietty/

Some Useful Tools

/55


Reference1

鳥哥的私房菜

http://linux.vbird.org/

Google

http://www.google.com/

Reference

/55


System call

System Call


Introduction

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

/55


Using kernel module

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

/55


Export sys call table

For sys_call_table, your should extern it in a file such as <top directory to the kernel sources>/arch/x86/kernel/i386_ksyms_32.c.

Export sys_call_table

01

02

03

externvoid* sys_call_table[];

/*variable should be exported. */

EXPORT_SYMBOL(sys_call_table);

/55


Export sys call table cont

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)

/55


Export sys call table cont1

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)

/55


Export sys call table cont2

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)

/55


Export sys call table cont3

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)

/55


Write your makefile

vim makefile

vim myservice.c

Write Your Makefile

/55


Write kernel module

Include and Define

Extern the “sys_call_table”

Write your own system call

Write Kernel Module

01

02

03

#include <linux/kernel.h> /* We're doing kernel work */

#include <linux/module.h>

#define __NR_mysyscall 200 /* define the number of our system call */

01

02

03

typedefvoid(*sys_call_ptr_t)(void);

extern sys_call_ptr_t sys_call_table[];

sys_call_ptr_t orig_sys_call;

01

02

03

04

05

/* Our system call */

asmlinkage int mysyscall(int n){

printk("enter mysyscall()\n");

return2*n;

}

/55


Write kernel module cont

Initialize the kernel module

Extern the “sys_call_table”

Write Kernel Module (Cont)

01

02

03

04

05

06

07

/* 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;

return0;

}

01

02

03

04

05

/* Cleanup - unregister the appropriate file from /proc */

void cleanup_module(){

printk("Remove mysyscall module\n");

sys_call_table[__NR_mysyscall]= orig_sys_call;

}

/55


Use kernel module

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

/55


User application

Write an application to use your system call

vim ap.c

Compile and execute

gcc ap.c –o ap

./ap 10

User Application

01

02

03

04

05

06

07

08

09

10

11

12

13

#include <stdlib.h>

#include <stdio.h>

#define _GNU_SOURCE

#include <unistd.h>

#include <sys/syscall.h>

#define __NR_mysyscall 200

int main(int argc,char*argv[])

{

printf("%d\n", syscall(__NR_mysyscall, atoi(argv[1])));

return0;

}

/55


Build your own system calls

Here are two approaches developing our own system calls

Using kernel module

Modify the source code of Linux directly

Build Your Own System Calls

/55


Write your system call

Create a new file in /usr/src/linux-2.6.x/kernel/

vim myservice.c

Add your system call

Write Your System Call

01

02

03

04

05

06

07

08

#include <linux/linkage.h>

#include <linux/kernel.h>

asmlinkage int sys_myservice(int arg1)

{

printk("my service is invoked!\n");

return arg1 *10;

}

/55


Write your system call cont x86 32

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

/55


Write your system call cont x86 321

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

/55


Write your system call cont x86 64

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

/55


Write your system call cont

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)

/55


Write your system call cont1

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)

/55


User application1

Write an application to use your system call

vim ap.c

Compile and execute

gcc ap.c –o ap

./ap 10

User Application

01

02

03

04

05

06

07

08

09

10

11

12

13

#include <stdlib.h>

#include <stdio.h>

#define _GNU_SOURCE

#include <unistd.h>

#include <sys/syscall.h>

#define __NR_myservice 300

int main(int argc,char*argv[])

{

printf("%d\n", syscall(__NR_myservice, atoi(argv[1])));

return0;

}

/55


Hints

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

/55


Hints cont

Results

Hints (Cont)

2.

1.

3.

/55


Some useful tool

LXR, http://rswiki.csie.org/lxr/http/source

Some Useful Tool

/55


Some useful tool cont

Manpages

apt-get install manpages-dev

Some Useful Tool (Cont)

/55


Reference2

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

/55


Os project 0 1

Q & A

/55


  • Login