实验一:编译运行Linux内核并使用gdb进行调试

Slides:



Advertisements
Similar presentations
Linux 环境及 Shell 程序 操作系统实验 1. 二、 Shell 编程与进程通信 常用 shell 命令 文件及文件属性操作 ls 、 cp 、 mv 、 rm ln 、 ln –s 、 chmod 、 groupadd 、 useradd 输入输出操作 echo 、 cat >> 、
Advertisements

上課教材 Database Slide Windows筆電 (32 bit)
ARM 嵌入式系统 第七章 嵌入式Linux.
命令行操作 shell介绍 常见三种Shell ---Bourne shell(sh) ---C shell(csh)
Linux 網路教學 東南技術學院資訊工程系 職稱:講師 姓名: 曹茂勁 民國 92年 12月.
技术支持部 张新凤( ) 并行机群系统安装、使用和管理 技术支持部 张新凤( )
自由軟體SFS3 SFS3 學務系統是採用開放原始程式碼所架構的校務行政電腦化系統,目標是希望使各中小學校能擁有一個自由開放強大的校務E化平台。 本系統採用 Apache+PHP+MySQL,具備強大的模組功能,並且跨平台支援 Linux/FreeBSD/Windows等作業環境。 最大的特色是:自由、開放、模組化、高度可擴展能力。
网御网络审计系统后台维护培训.
資訊安全與系統管理 2013/3/13 Chien wei lin.
基于操作系统的编程复习 张玉宏
UNIX系統與資料庫安裝 Why UNIX 常用的工具程式介紹 資料庫的安裝.
第一讲:Linux基础培训.
第16章 編譯與升級Kernel系統核心 課前指引
Linux Further.
Linux 的進階檔案處理.
嵌入式Linux开发快速入门 迟思堂工作室 李迟
第7章:文件共享与远程控制 第6章:vi/vim——回顾 本章教学目标: vi/vim的三种工作模式 vi/vim的基本用法
Linux.
Building Embedded Linux 2
Computer Network Lab 資碩一 黃麒瑋
台灣大學計算機及資訊網路中心 教學研究組 張傑生
配置编译内核.
網路安全技術 – 期末報告 A 高名勳 指導教授:梁明章 老師.
DM81X 视频采集处理 ——软硬件环境介绍 广州创龙电子科技有限公司
編譯環境介紹.
Linux 基础与常用命令简介 生物信息学培训班 杭州,2018年1月18日 周银聪.
Linux环境高级编程实验.
编译与多文件.
第二天 计算机基础技能培训 (一)linux基础知识
本节我们结合AD5724驱动时序给大家介绍一下状态机在实际工程中的使用。
Linux server 連線軟體: 主機:kitty.cs.pu.edu.tw 帳號:dar 密碼:n….w.
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
曙光集群简明使用手册 技术支持中心.
Linux基本操作 程設實習課 ( 2/25 ).
伺服器探索營 Day 1 指導老師: 張啟中 (JohnAxer) 教學助理:
第3章 Linux免安裝版學習與操作 課前指引
永远的 Autotools ——GNU Build System 简介(一)
Linux 基 本 命 令 man–命令帮助信息。 ls –看目录里文件的信息。 cd–换目录 mkdir–创建目录 rmdir–删除目录
Chapter 6 Linux 檔案權限與目錄配置 VBird 2005/08/03
Red Hat Linux 安装与使用方法的简单介绍
壓縮與備份工具.
TinyOS开发环境安装 基于Ubuntu14.04.
(第2版).
Linux核心編譯與模組管理 2013/01/19.
雲端計算.
编辑文本文件 软件包管理 Samba 在Linux下使用Windows共享打印机
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A Lab3.
利用ICE通信中间件构建分布式应用程序开发框架
系统管理员培训(I期) 浙江省基层人民法院 -V8版介绍及系统管理培训 二OO八年四月二十三日 法院事业部经理:周春宏
Linux 如何在 中 和压缩 打包 文件 系统管理 宁波市高校慕课联盟课程
第二章 UNIX系统安装与常用命令.
Confidential Property
第三章 UNIX的文件与目录.
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A Lab3.
UNIX指令-檔案與目錄操作.
杨振伟 清华大学 第一讲:Linux环境下编程(1)
102學年度 健康檢查說明會 健康中心 王勤雅.
Lab01 工作站&Linux操作 日期:2011/03/07.
实验二:添加Linux系统调用及熟悉常见系统调用
粒子物理与核物理实验中的数据分析 杨振伟 清华大学 第1讲:Linux环境下的编程.
助教:田成锦、汪睿、游翎璟 吴加禹、李佳伟、唐凯成
作業一: 安裝Linux於btrfs上 中正大學 作業系統實驗室 指導教授:羅習五
Git 新一代版本控制系统 superwen.
杨振伟 清华大学 第一讲:Linux环境下编程(1)
獨孤派作業系統 main memory 中正大學 作業系統實驗室 指導教授:羅習五.
Linux网络配置管理.
Linux文件系统.
104 四技二專甄選入學 簡章解析 輔導室 何乙娟.
第六章 文件系统与文件管理 6.4 Linux文件管理 1、比较MS DOS 与 Linux的目录结构 一、Linux文件系统的树形结构
Presentation transcript:

实验一:编译运行Linux内核并使用gdb进行调试 助教:吴加禹、李佳伟、唐凯成 田成锦、汪睿、游翎璟

实验目的 熟悉Linux系统运行环境 制作根文件系统 掌握Linux内核编译方法 学习如何使用gdb调试内核 2019/5/6

实验环境 主机:Ubuntu i386 14.04 调试的Linux内核版本:2.6.26 2019/5/6

实验内容——环境准备 准备Linux内核 下载linux-2.6.26.tar.gz,解压缩 编译 wget https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.tar.gz tar -zvxf linux-2.6.26.tar.gz 编译 cd linux-2.6.26 make i386_defconfig make 2019/5/6

实验内容——环境准备 准备qemu 下载安装 sudo apt-get install qemu 2019/5/6

实验内容——1.制作根文件系统 准备一个应用程序,使用静态链接将其编译为可执行文件, 命名为init 建立目标根目录映像 gcc -static -o init xxx.c 建立目标根目录映像 dd if=/dev/zero of=myinitrd4M.img bs=4096 count=1024 mkfs.ext3 myinitrd4M.img mkdir rootfs sudo mount -o loop myinitrd4M.img rootfs 将init拷贝到目标根目录下 sudo cp init rootfs/ 2019/5/6

实验内容——1.制作根文件系统 准备dev目录 sudo mkdir rootfs/dev sudo mknod rootfs/dev/console c 5 1 sudo mknod rootfs/dev/ram b 1 0 sudo umount rootfs 使用qemu启动系统 qemu-system-i386 -kernel PATH-TO-linux-2.6.26/arch/x86/boot/bzImage –initrd myinitrd4M.img -append “root=/dev/ram init=/init” 2019/5/6

实验内容——1.制作根文件系统 实验结果 提示 可以在qemu窗口看到init的输出结果 你可能要用以下指令终止qemu进程: ps -ef | grep qemu | grep -v grep | awk '{print $2}' | xargs sudo kill 2019/5/6

实验内容——1.使用busybox制作根文件系统 wget https://busybox.net/downloads/busybox-1.30.1.tar.bz2 tar -jxvf busybox-1.30.1.tar.bz2 cd busybox-1.30.1 编译 make defconfig make menuconfig  #修改配置如下: Settings –> Build Options [*] Build static binary(no share libs) (-m32 -march=i386) Additional CFLAGS (-m32) Additional LDFLAGS What kind of applet links to install –> (X) as soft-links make make install 2019/5/6

实验内容——1.使用busybox制作根文件系统 准备根文件系统( 在busybox的_install目录下) sudo mkdir dev sudo mknod dev/console c 5 1 sudo mknod dev/ram b 1 0 创建init文件写入以下内容 #!/bin/sh echo "INIT SCRIPT“ mkdir /proc mkdir /sys mount -t proc none /proc mount -t sysfs none /sys mkdir /tmp mount -t tmpfs none /tmp echo -e "\nThis boot took $(cut -d' ' -f1 /proc/uptime) seconds\n" exec /bin/sh 2019/5/6

实验内容——1.使用busybox制作根文件系统 准备根文件系统( 在busybox的_install目录下) find . -print0 | cpio --null -ov --format=newc | gzip -9 > PATH-TO- defined_by_you/initramfs-busybox-x86.cpio.gz 运行 qemu-system-i386 -s -kernel PATH-TO-linux2.6.26/arch/x86/boot/bzImage - initrd PATH-TO-defined_by_you/initramfs-busybox-x86.cpio.gz --append "root=/dev/ram init=/init" 2019/5/6

实验内容——1.使用busybox制作根文件系统 在上一步得到的qemu命令行中练习以下Linux命令 ls、touch、cat、echo、mkdir、mv、cd、cp等 ls       # 查看当前目录下的所有文件/文件夹 ls -l    # 查看当前目录下的所有文件/文件夹的详细信息 touch 1.txt # 创建1.txt echo i am 1.txt > 1.txt # 向1.txt写入内容 cat 1.txt  # 查看1.txt内容 mkdir 1   # 创建目录1 mv 1.txt 1 # 将1.txt移动到目录1 cd 1     # 打开目录1 cp 1.txt 2.txt # 将1.txt复制到2.txt 2019/5/6

实验内容——2.使用gdb调试内核 gdb是什么? gdb怎么用? gdb是一款终端环境下的调试工具 以调试普通C程序为例 编译程序时加入-g选项,如:gcc -g -o test test.c 运行gdb调试程序:gdb test 2019/5/6

实验内容——2.使用gdb调试内核 gdb常用命令如下 r/run # 开始执行程序 b/break <location>   # 在location处添加断点,location:代码行或函 数名 c/continue       # 继续执行到下一个断点或程序结束 n/next      # 运行下一行代码 list           # 显示当前行代码 p/print <expression>  # 查看表达式expression的值 2019/5/6

实验内容——2.使用gdb调试内核 在qemu中加入gdb调试选项 建立gdb与gdb server之间的链接 此时窗口会等待gdb连接 qemu-system-i386 -s -S -kernel PATH-TO-linux-2.6.26/arch/x86/boot/bzImage – initrd PATH-TO-defined_by_you/initramfs-busybox-x86.cpio.gz -nographic – append "root=/dev/ram init=/init console=ttyS0“ 此时窗口会等待gdb连接 建立gdb与gdb server之间的链接 gdb target remote:1234 # 建立gdb和gdb server间的连接 c          #继续运行 (由于没有加载符号表,不方便设置断点,下面介绍如何断点调试) 2019/5/6

实验内容——2.使用gdb调试内核 加载符号表,并进行断点调试(查看vmlinux的符号用nm命令) file PATH-TO-linux-2.6.26/vmlinux 设置断点 break start_kernel 执行到断点 c 若要显示断点处的源代码,需在编译内核时提供相关支持 配置Linux编译选项,使之携带调试信息 make menuconfig kernel hacking --> [*] compile the kernel with debug info 2019/5/6

验收方式 现场验收 利用gdb在内核中设置1~2个断点,查看断点处源代码 在qemu中运行Linux内核 2019/5/6

报告提交方式 将实验报告、源代码打包为压缩包提交 提交至邮箱:ustc_os2019@163.com 邮件主题、文件名称、压缩包名称 均采用以下格式命名 x-学号-姓名(x:代表第x次实验) 例如张三的第1次实验命名为“1-PB17011010-张三” 未按照规范命名的邮件会被忽略、删除 (第一次实验没有修改源代码,只需提交报告即可) 2019/5/6