Download presentation
Presentation is loading. Please wait.
Published byAvice Armstrong Modified over 8 years ago
1
OS Project 0 February 25, 2015
2
Outline Linux Installation Linux Kernel Compilation System Call Development Kernel Modules / 452
3
Part I Linux Installation
4
Kernel versus Distribution / 454 Kernel is the core of the operating system including scheduler, memory management, file system, etc. Distribution is a full functional environment including the kernel and a large collection of software applications. The following slides are based on Ubuntu 12.04.4 (desktop version). Download Link: http://ftp.twaren.net/Linux/Ubuntu/ubuntu-cd/precise/ubuntu-12.04.4- desktop-amd64.iso (64-bit) http://ftp.twaren.net/Linux/Ubuntu/ubuntu-cd/precise/ubuntu-12.04.4- desktop-amd64.iso http://ftp.twaren.net/Linux/Ubuntu/ubuntu-cd/precise/ubuntu-12.04.4- desktop-i386.iso (32-bit) http://ftp.twaren.net/Linux/Ubuntu/ubuntu-cd/precise/ubuntu-12.04.4- desktop-i386.iso
5
Preparation (1/2) / 455 A computer An Ubuntu 12.04 DVD or image A clear head and relaxed mind Some drinks, food, or comics
6
Preparation (2/2) / 456 If you want to install Linux on your hard disk, please set at least 16GB unpartitioned space. You may want to shrink your existing disk by disk management if there is no more unpartitioned space. Ubuntu can coexist with Windows. Change the boot sequence to boot from CD-ROM first. If you want to install Linux on a virtual machine, you can use VirtualBox or VMware. VirtualBox Website: https://www.virtualbox.org/https://www.virtualbox.org/ Please refer to this website for creating a VM in VirtualBox.website
7
/ 457
8
8
9
9
10
10
11
/ 4511
12
/ 4512
13
/ 4513
14
/ 4514
15
Some Useful Commands / 4515 Installing packages in Ubuntu $ apt-cache search xxxx $ sudo apt-get install xxxx GNU Compiler Collection $ gcc -o test test.c $./test Makefile $ make Text-mode editor $ vim SSH server and client $ ssh -p port user@hostname
16
Some Useful Tools / 4516 SSH server $ sudo apt-get install ssh SSH client for Windows PieTTY http://ntu.csie.org/~piaip/pietty/ http://ntu.csie.org/~piaip/pietty/
17
References / 4517 鳥哥的私房菜 http://linux.vbird.org http://linux.vbird.org Ubuntu 正體中文站 http://www.ubuntu-tw.org http://www.ubuntu-tw.org Ubuntu Homepage http://www.ubuntu.com http://www.ubuntu.com
18
Part II Linux Kernel Compilation
19
When Should We Compile Kernel? / 4519 There are various situations we have to compile the kernel. Try new kernel patches for the latest laptops. Enable/disable features built in the kernel. Develop new features. … This slides are based on Linux 3.13.2. http://ftp.ntu.edu.tw/linux/kernel/v3.x/linux-3.13.2.tar.xz http://ftp.ntu.edu.tw/linux/kernel/v3.x/linux-3.13.2.tar.xz
20
Download Source Archives / 4520 Kernel Website: http://www.kernel.orghttp://www.kernel.org Mirror: http://ftp.ntu.edu.tw/linux/kernel/v3.x/
21
Preparation / 4521 Setting up build environment $ sudo apt-get update $ sudo apt-get install gcc vim ssh libncurses5- dev Getting the source archive $ cd ${HOME} $ wget http://www.kernel.org/pub/linux/kernel/v3.0/linux -3.X.X.tar.xz Extracting the archive $ tar Jxvf linux-3.X.X.tar.xz $ cd linux-3.X.X
22
Kernel Configuration (1/2) / 4522 There are several ways to configure the kernel. $ make config $ make menuconfig $ make xconfig (It will need qt4-qmake and qt4-dev-tools packages.) ... If you do not know how to configure, you can copy the old configuration file from /boot. $ cp /boot/config-`uname -r`.config $ make olddefconfig $ make menuconfig This step is optional.
23
Kernel Configuration (2/2) / 4523
24
Kernel Compilation / 4524 The first time (about 30min ~ 1.5hr): $ make bzImage $ make modules (It takes quite a long time.) $ sudo make modules_install $ sudo make install $ sudo mkinitramfs -o /boot/initrd.img-3.X.X 3.X.X Do this whenever you reinstall the modules. Configure the boot loader and then reboot! Others (about 5~10min): $ make bzImage $ sudo make install Then reboot!
25
Kernel Compilation with Multiple Cores / 4525 See how many cores on your machine. $ cat /proc/cpuinfo | grep processor | wc -l E.g., 4. Compile with the number of jobs (threads). $ make -j4 bzImage $ make -j4 modules ...
26
Boot Loader Configuration (Optional) / 4526 Ubuntu will do this for you when installing the kernel. Adding a new entry to /boot/grub/grub.cfg If you got a black screen after booting the new kernel Change ‘ gfxmode $linux_gfx_mode ’ ‘ gfxmode text ’
27
Rebooting / 4527 Do not forget to reboot every time you install a new kernel image! You can use ‘ uname -a ’ to check current system information.
28
Part III System Call Development
29
Preparation / 4529 Find out whether the kernel is 32-bit or 64-bit version. $ uname -p 32-bit: i386 i686 64-bit: x86_64
30
Adding a System Call (1/4) / 4530 Define your system calls. Create a new file kernel/myservice.c. Add this new attribute to kernel/Makefile. obj-y += myservice.o #include asmlinkage int sys_myservice(int arg1) { printk(“My service is invoked!\n"); return arg1 * 10; } 01 02 03 04 05 06 07 08
31
Adding a System Call (2/4) / 4531 Declare the prototype of your system calls. Add the declaration to include/linux/syscalls.h. asmlinkage int sys_myservice(int arg1);
32
Adding a System Call (3/4) / 4532 Register a system call number (32-bit). For Linux 3.X, it has a automatic way to generate system calls compared to the previous versions. Add a new entry to arch/x86/syscalls/syscall_32.tbl. 350i386myservicesys_myservice The generated file is in arch/x86/include/generated/uapi/asm, after compilation.
33
Adding a System Call (4/4) / 4533 Register a system call number (64-bit). Add a new entry to arch/x86/syscalls/syscall_64.tbl. 313commonmyservicesys_myservice The generated file is in arch/x86/include/generated/uapi/asm, after compilation.
34
System Call Invocation / 4534 Create a test file ap.c to try your system call. Compile & execute. $ gcc -o ap ap.c $./ap 10 #include #define _GNU_SOURCE #include #define __NR_myservice 350 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
35
Related APIs / 4535 Access a block of data from/to user space in the kernel. #include unsigned long copy_from_user (void* to, const void __user* from, unsigned long n); unsigned long copy_to_user (void __user* to, const void* from, unsigned long n); Use the generic function syscall to invoke a specific system call in user space. #include int syscall(int number,...); The first argument, number, is the system call number.
36
Some Useful Tools (1/2) / 4536 LXR Website: http://lxr.linux.no/linux/http://lxr.linux.no/linux/
37
Some Useful Tools (2/2) / 4537 Manpages $ sudo apt-get install manpages-dev $ man XXXX
38
References / 4538 Kernel Website http://www.kernel.org http://www.kernel.org LXR http://lxr.linux.no/linux/ http://lxr.linux.no/linux/
39
Part IV Kernel Modules
40
An Example of Writing a Kernel Module (1/5) / 4540 Definition of the module structure
41
An Example of Writing a Kernel Module (2/5) / 4541 Initialization and cleanup functions
42
An Example of Writing a Kernel Module (3/5) / 4542 File operations
43
An Example of Writing a Kernel Module (4/5) / 4543 User AP
44
An Example of Writing a Kernel Module (5/5) / 4544 Makefile Testing $ sudo insmod hello.ko $ dmesg $ sudo./ap $ dmesg $ sudo rmmod hello
45
Q & A / 4545
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.