Linux核心編譯與模組管理 2013/01/19.

Slides:



Advertisements
Similar presentations
第 3 章操作系统基础 3.1 操作系统概述 3.2 操作系统的功能模块 3.3 典型操作系统概述.
Advertisements

第8讲 安装和卸载软件包 本章主要内容: 包管理 RPM操作 用RPM诊断 文件压缩与打包 图形界面下包的安装与管理.
计算机基础 与应用案例教程 第一篇 基础理论篇 第4章 计算机软件系统.
SCILAB 科學軟體教學 撰寫者: 1.中央大學大氣科學系 楊善文 2. (為本文有貢獻者,記得在此留名。)
課程地圖 (104年入學-日間部) 校通識核心 專業課程 必修與選修 與管理模組 網路技術 App設計與應用模組 學院通識核心 學院專業核心
ARM 嵌入式系统 第七章 嵌入式Linux.
第1单元 操作系统概论 第一节 绪论 操作系统定义.
健康選擇飲品 營養師 顏妤蓉 2017/3/13.
Lecture-III-Linux生活应用 许光全 计算机科学与技术学院
Linux并行计算平台搭建及应用 王彦棡 2010年5月.
技术支持部 张新凤( ) 并行机群系统安装、使用和管理 技术支持部 张新凤( )
Lecture-III-Linux生活应用 许光全 计算机科学与技术学院
自由軟體SFS3 SFS3 學務系統是採用開放原始程式碼所架構的校務行政電腦化系統,目標是希望使各中小學校能擁有一個自由開放強大的校務E化平台。 本系統採用 Apache+PHP+MySQL,具備強大的模組功能,並且跨平台支援 Linux/FreeBSD/Windows等作業環境。 最大的特色是:自由、開放、模組化、高度可擴展能力。
基于ARM和linux的开发 华中科技大学 武汉创维特 2017/3/20.
嵌入式系统讲义 第5章 嵌入式系统软件开发环境与工具
第1讲 实验环境.
LINUX 环境下程序开发基础 曙光用户培训课程系列 课程时间:1.5小时 更新日期:2008年3月.
UClinux在3000平台上的移植.
資訊安全與系統管理 2013/3/13 Chien wei lin.
第16章 編譯與升級Kernel系統核心 課前指引
QtiPlot-實驗室數據分析與繪圖 撰文者: 1.海洋大學光電所 楊善文 2. (如對本文有貢獻者,記得在此留名)
Linux Further.
作業系統的結構 日期 : 2018/9/17.
Ubuntu 驱动安装准备 1. 确认ubuntu操作系统版本 2. 运行安装脚本 3.驱动Controller.
第7章:文件共享与远程控制 第6章:vi/vim——回顾 本章教学目标: vi/vim的三种工作模式 vi/vim的基本用法
Linux.
主讲:邓 志 龙 Linux网络技术 主讲:邓 志 龙
Linux的認識與使用 2013/01/05.
嵌入式操作系统 陈香兰 Fall 2009.
网络仿真工具介绍
Computer Network Lab 資碩一 黃麒瑋
Linux环境下程序编译 曙光信息产业(北京)有限公司.
配置编译内核.
DM81X 视频采集处理 ——软硬件环境介绍 广州创龙电子科技有限公司
第1章 Fortran概述 作为一门诞生于上个世纪50年代后半期的高级计算机语言,Fortran在这个C/C++、Java等新兴语言大行其道的时代仍然活跃在人们的视野之中。Fortran语言的长项在于数值计算,在科学研究和工程设计领域有着广泛的用途。在描述数学语言的自然性方面,Fortran同现存的其他高级语言相比有着明显的优势。对于科研工作者和工程技术人员而言,Fortran语言的易学性和易用性是公认的。
高并发之Redis初级 讲师:杨振平 博客地址:blog.csdn.net/yangzhenping
編譯環境介紹.
张吉豫 GNU编译工具链使用简介 张吉豫
讲师:田家华 第1章 认识计算机 本章要点   计算机的发展 计算机的组成.
编译与多文件.
第二天 计算机基础技能培训 (一)linux基础知识
本节我们结合AD5724驱动时序给大家介绍一下状态机在实际工程中的使用。
Networking for Home and Small Businesses – Chapter 2
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
Native Development Kit
伺服器探索營 Day 1 指導老師: 張啟中 (JohnAxer) 教學助理:
永远的 Autotools ——GNU Build System 简介(一)
第1章、系統軟體 作者:陳鍾誠 旗標出版社.
和諧社區資訊服務推廣計畫 -軟體雲端社區 資訊研習營
作業系統實習課(三) -建造新的System Call-
内核移植基础.
TinyOS开发环境安装 基于Ubuntu14.04.
(第2版).
雲端計算.
编辑文本文件 软件包管理 Samba 在Linux下使用Windows共享打印机
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A Lab3.
利用ICE通信中间件构建分布式应用程序开发框架
Confidential Property
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A Lab3.
C语言环境配置.
導 論 教學投影片.
实验一:编译运行Linux内核并使用gdb进行调试
WINDOWS 7 磁盘管理.
高级大数据人才培养丛书之一,大数据挖掘技术与应用
助教:田成锦、汪睿、游翎璟 吴加禹、李佳伟、唐凯成
Git 新一代版本控制系统 superwen.
大数据应用人才培养系列教材 Python语言 刘 鹏 张 燕 总主编 李肖俊 主编 刘 河 钟 涛 副主编.
獨孤派作業系統 main memory 中正大學 作業系統實驗室 指導教授:羅習五.
劉庠宏、林合治編著 國立高雄大學應用數學系 2005年3月1日
课程介绍 1、嵌入式系统开发先序课程; 2、共32+8课时: 3、本期采用混合式教学成绩计算方式:
Presentation transcript:

Linux核心編譯與模組管理 2013/01/19

gcc與make GNU Complier Collection make GNU專案所開發的重要工具之一,包含了C / C++ / Obj-c / Fortran / Java / Ada / Go 編譯/直譯器 此編譯器原要設計給GNU OS使用,目前已成為linux 核心的主要編譯工具 make 自動化編譯工具,主要功能為呼叫相關程式以完成將 程式碼轉為標的(物件檔, 可執行檔)的工作 程式設計者常撰寫一個名為Makefile文本,再執行 make以執行此文本中的編譯步驟。

gcc編譯流程 編譯(compilation) 將原始碼(高階程式語言)轉換成目的碼(可執行的機器 碼)的過程,一個完整的編譯流程可能包含了前置處 理、編譯、優化、匯編、連結 *.a *.so Pre-processing (cpp) Compilation (gcc) Assembly (as) Src code (*.c) Linking (ld) *.i *.s *.o Header (*.h) *.a *.so pre-processed file assembly file object file

gcc程式編譯常用命令 – 1/2 編譯原始檔成為可執行檔 編譯原始檔成為物件檔(*.o) (不連結凾式庫) 編譯原始檔成為組合語言(*.s) ~$ gcc hello.c -o hello ~$ gcc hello.c -c ~$ gcc hello.c -S

gcc程式編譯常用命令 – 2/2 增加標頭檔(*.h)參考的位置 增加函式庫(*.a, *.so)的位置 -I[路徑] – L[路徑] –l[函式庫名稱] or ~$ gcc –I/my/include hello.c -o hello ~$ gcc hello.c -o hello –L/my/lib –lm ~$ gcc hello.c -o hello –Llibm.a

Makefile 範例 Makefile固定格式 CC=gcc INCL_DIR=. LIB=-lm all: ${CC} –c hello.c –I${INCL_DIR} ${CC} –c world.c –I${INCL_DIR} ${CC} *.o -o app ${LIB} hello: ${CC} –c hello.c world: ${CC} –c world.c clean: rm -f app *.o *~ 範例檔:http://w.csie.org/~r97944012/make_exp.tar.gz

Linux核心 簡介 介於軟體和硬體之間,也就是作業系統(Operating System),負責處理所有系統指令。包括硬碟的控制、記 憶體管理、行程管理、檔案系統、網路功能等等。

Linux核心原始碼 – 1/2 取得核心原始碼 Linux kernel http://www.kernel.org

Linux核心原始碼 – 2/2 核心原始碼資料夾 名稱 說明 arch 各廠牌CPU的驅動程式支援 block 所有SCSI與外接區塊裝置的驅動程式與策略管理 crypto 所有作業系統與驅動程式需要的編碼函式庫。舉例來說:ISCSI驅動程式可能需要CRC32c、Linux本身則需要MD5, SHA-128等等… drivers 各種作業系統提供的實體或虛擬裝置的驅動程式 firmware 提供一些沒有原始碼的驅動程式。例如RAID、網路卡等等 net, sound 各廠牌網路卡/音效卡驅動程式 mm, virt 虛擬記憶體管理策略 lib 基本作業系統需要的C語言函式庫,例如:memcpy, printk等 kernel 作業系統的主程式碼 init 開機後第一支程序init的程式碼 security Linux的使用者權限管理程式碼

編譯前的準備 – 1/2 下載核心原始碼檔案 安裝編譯工具 cd /usr/src ~$ sudo wget [核心位址].tar.gz # 解壓縮 ~$ sudo tar -xvzf [核心].tar.gz 或 sudo tar -xvjf [核心].tar.bz2 # 準備核心的設定檔.config ~$ sudo cp /boot/config-’uname -r’ .config 安裝編譯工具 ~> sudo apt-get install build-essential kernel-package libncurses5-dev fakeroot

編譯前的準備 – 2/2 加上更新檔(patch檔) 如何製作自己的更新檔? 對Linux的核心而言,patch檔通常是放在核心原始碼的 目錄中,然後執行(以核心3.7.2為例): 如果要還原更新檔更新的部分,則使用: 如何製作自己的更新檔? diff -uN [舊檔案] [新檔案] > test.patch ~/usr/src/linux-3.7.2#> patch -p1 < 3.7.2.patch ~/usr/src/linux-3.7.2#> patch -RE -p1 < 3.7.2.patch

編譯核心 – UBUNTU Way (1) 設定核心編譯選項 (2) 編譯核心前需先清除先前可能已編過的物件檔 ~$ make menuconfig # 在 menuconfig 選單內,讀進剛複製的.config作為範本 (2) 編譯核心前需先清除先前可能已編過的物件檔 ~$ fakeroot make-kpkg clean (3) 編譯核心並製成Debian封裝檔 ~$ fakeroot make-kpkg --initrd kernel_image kernel_headers # 得到核心安裝檔 (4) 安裝核心 ~$ sudo dpkg –i *. deb (5) 建立initrd檔案並更新GRUB ~$ sudo update-initramfs -c -k [核心版本] ~$ update-grub

模組編譯與使用 – 1/3 (1) 設定模組編譯選項 (2) 編譯模組 (3) 安裝編好的模組 ~# make menuconfig # 在menuconfig的選單中,將想編成模組的功能標為<M> (2) 編譯模組 ~# make modules (3) 安裝編好的模組 ~# sudo make install modules

模組編譯與使用 – 2/3 模組的載入(insmod)與移除(rmmod) 檢視模組 範例:載入一個模組 範例:移除一個模組 檢視所有已安裝的模組(分散於/lib/modules/$(uname -r)中) 檢視目前被使用的模組 ~# insmod [模組檔案] 或 ~# modprobe [模組名稱] ~# rmmod [模組名稱] ~# modprobe -l ~# lsmod

模組編譯與使用 – 3/3 編譯單一模組 在下載的核心原始碼目錄中,使用指令: 例如:要編譯fat模組讓Linux支援Windows的FAT16格 式,指令如下: ~# make modules SUBDIRS=[模組相對路徑] ~# cd /usr/src/linux-3.7.2/ ~# make modules SUBDIRS=driver/i2c

實作專題01 試著將XFS編成模組,並在開機時載入使Linux支 援XFS檔案系統