收藏 分享(赏)

从零开始构建自己的U盘Linux.docx

上传人:HR专家 文档编号:6036409 上传时间:2019-03-25 格式:DOCX 页数:18 大小:1.30MB
下载 相关 举报
从零开始构建自己的U盘Linux.docx_第1页
第1页 / 共18页
从零开始构建自己的U盘Linux.docx_第2页
第2页 / 共18页
从零开始构建自己的U盘Linux.docx_第3页
第3页 / 共18页
从零开始构建自己的U盘Linux.docx_第4页
第4页 / 共18页
从零开始构建自己的U盘Linux.docx_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、课程设计报告课程名称: 嵌入式系统原理与设计 姓 名: 学 号: 班 级: 专 业: 电子信息科学与技术 从零开始构建自己的 U 盘 Linux一 摘要:介绍本报告的主要内容。本报告是关于在 Ubuntu 系统下,通过一些基础操作,来构建一个 U 盘 Linux,方法虽然比直接用现成的工具软件方便,但是可以让我们了解 Linux 的基本开发过程,是学习嵌入式的很好的一个方法。主要内容是构建过程中的基本方法,在这个过程中遇到的一些问题,以及查询资料,解决问题的过程。二 引言:说明本课程报告所选知识点相关技术的意义。目前的主板 BIOS 都支持 USB 和硬盘的启动方式,这样对于Windows 的

2、系统维护与安装工作越来越方便,在优盘上建立 Linux启动盘,对于系统维护人员具有更加实用的意义。USB 闪存存储装置(优盘)由于具有轻巧精致、经常用来在 PC之间交换文件。目前新出的主板 BIOS 都支持 USB 和硬盘的启动方式,这样对于 Windows 的系统维护与安装工作越来越方便。三 U 盘的构建步骤。1准备工作1.1 准备开发主机首先在电脑上安装虚拟机 VMWare,然后将下载的 Ubuntu 镜像安装在该虚拟机上,安装后如图:1.2 准备测试用计算机本次过程中测试用计算机即是本机,当 U 盘做好后,将本机 BIOS设置为从 USB 启动,然后在插着 U 盘时开机既可测试。1.3

3、准备 Linux 的内核源代码现在有很多可以下载源代码的网站,从网站上现在即可,1.4.准备 BusyBox 工具1.4.1 从 BusyBox 的官方网站下载 BusyBox 的源代码在这里将他放到/home/luck/busybox 下,因为/tmp 是临时文件夹,在关机后里面的内容会丢失,所以此处选择放在用户目录下,可以再关机重启后继续使用。1.4.2 解压缩:直接使用右键将 BusyBox 解压1.4.3 进入 busybox-1.21.0 目录,修改 BusyBox 中的 init.c 源代码,具体操作如下:# cd /home/luck/busybox/ busybox-1.21.

4、0#vi init/init.c将 init.c 中的#define INIT_SCRIPT “/etc/init.d/rcS“改为#define INIT_SCRIPT “/etc/rc.d/rc.sysinit“1.44 对 BusyBox 进行配置#make defconfig#make menuconfig当执行第二条时即进入人工配置菜单时,出现了一个错误:curses.h:No such file or directory然后就百度了一下出现这个问题的原因,原来是缺少了这个库函数,于是就对着新东西进行了升级和安装具体操作如下:sudo apt-get update sudo apt-

5、get upgrade sudo apt-get install libncurses5-dev libncursesw5-dev然后就开始配置将一些必要的选项打*或 :BusyBox SettingBuild Options*Build Busybox as a static binary (no shared libs)Shellschose your default shell(ash):*ash hush msh1.45 编译 BusyBox,命令如下:# make在执行 make 时出现了一个错误经过查找资料发现可以这样解决:只要把 make menuconfig 去掉如下选项Lin

6、ux System Utilities Support mounting NFS file systems 网络文件系统Networking Utilities inetd (Internet 超级服务器 )【注】实际上只是暂时解决了这个报错的问题,由于去掉了一些支持带来了更大的问题。 (此处只要将超级服务器的选项去掉即可,后面会详述出现的问题) 。1.46 安装 BusyBox,命令如下:#make install执行完后会产生_install/bin/ 和_install/sbin/后面会用到这些文件。2.编译 Linux 内核从网上 http:/www.kernel.org 下载 Lin

7、ux 内核压缩之后就可以配置的,编译内核了,具体操作如下我下载的是 linux-3.15.1.tar.xz 文件解压如下 tar J linux-3.15.1.tar.xzcd /home/sudo tar J linux-3.15.1.tar.xzmake menuconfig /进行内核编译需要注意是由于支持 U 盘启动,配置内核时必须选择以下内容:选择 Device Devices(设备驱动) -Block devices 下的loopback device support, RAMblock device support选择 Device Devices-SCSI Support, S

8、CSI disk Support, SCSI low-drivers-Buslogic SCSI support 等支持;(3) 选择 Device Devices-USB Support 下的 Support for Host-side USB,Preliminary USB device filesystem ,USB Mass Storage support 支持;另外,还需要选 UHCI HCD support 或 OHCI HCD support选择后选择保存使用“make dep”命令寻找依赖关系,由系统决定需要编译那些内容使用“make clean”命令清除以前编译内核时生成中间

9、文件等。使用“make bzImage”命令生成压缩的 Linux 文件 3.在优盘上建立根文件系统3.1 在优盘上建立 Linux 分区和 ext2 文件格式使用 fdisk l 查看设别文件进行分区,操作如下:fdisk /dev/sdb 出现以下提示:Command (m for help): d 输入 d 删除原来的分区,原来有几个分区就输入几次 d。No partition is defined yet!Command (m for help): n 输入 n 建立新的分区,出现:Partition type:p primary (0 primary, 0 extended, 4 f

10、ree)e extendedSelect (default p): pPartition number (1-4, default 1): 1First sector (2048-16179199, default 2048): Using default value 2048Last sector, +sectors or +sizeK,M,G (2048-16179199, default 16179199): +512M 输入+512M,在 U 盘上建立一个 512M 大小的分区。Command (m for help): p 输入 p 查看是否分区成功。Disk /dev/sdb: 8

11、283 MB, 8283750400 bytes2 heads, 63 sectors/track, 128406 cylinders, total 16179200 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x00372dfaDevice Boot Start End Blocks Id System/dev

12、/sdb1 2048 1050623 524288 83 LinuxCommand (m for help): w 输入 w 保存并退出 fdisk。The partition table has been altered!Calling ioctl() to re-read partition table.WARNING: Re-reading the partition table failed with error 16: Device or resource busy.The kernel still uses the old table. The new table will be

13、used atthe next reboot or after you run partprobe(8) or kpartx(8)Syncing disks. 卸载优盘:umount /dev/sdb1创建文件系统:mkfs.ext2 /dev/sdb1执行过程截图如下:3.2 建立必须的目录操作如下:rootubuntu:/home/luck# mkdir /mnt/usbrootubuntu:/home/luck# mount /dev/sdb1 /mnt/usbrootubuntu:/home/luck# cd /mnt/usbmkdir boot etc etc/rc.d proc t

14、mp var dev mnt lib initrdchmod 755 boot etc etc/rc.d proc tmp var dev mnt lib initrd3.3 建立必须的设备节点文件操作如下:rootubuntu:/mnt/usb# cd devrootubuntu:/mnt/usb/dev# mknod tty c 5 0rootubuntu:/mnt/usb/dev# mknod console c 5 1rootubuntu:/mnt/usb/dev# chmod 666 tty consolerootubuntu:/mnt/usb/dev# mknod tty0 c 4

15、 0rootubuntu:/mnt/usb/dev# chmod 666 tty0rootubuntu:/mnt/usb/dev# mknod ram0 b 1 0rootubuntu:/mnt/usb/dev# chmod 600 ram0rootubuntu:/mnt/usb/dev# mknod null c 1 3rootubuntu:/mnt/usb/dev# chmod 666 null3.4 生成一些常见的命令和工具rootubuntu:/mnt/usb/dev# cp -a -R -f /home/luck/busybox/busybox-1.21.0/_install/* /

16、mnt/usb/rootubuntu:/mnt/usb/dev#cd /binrootubuntu:/mnt/usb/dev#ln l shrootubuntu:/mnt/usb/dev#ldd bash 从此处可以看出需要哪些库的支持,需要把这些库复制到 U 盘中。rootubuntu:/bin# cp /bin/bash /mnt/usb/binrootubuntu:/bin# cp /lib/i386-linux-gnu/libtinfo.so.5 /mnt/usb/librootubuntu:/bin# cp /lib/i386-linux-gnu/libdl.so.2 /mnt/us

17、b/librootubuntu:/bin# cp /lib/i386-linux-gnu/libc.so.6 /mnt/usb/librootubuntu:/bin# cp /lib/ld-linux.so.2 /mnt/usb/librootubuntu:/bin# cd /mnt/usb/binrootubuntu:/mnt/usb/bin#rm sh 此处需将原来的 sh 文件删除rootubuntu:/mnt/usb/bin# ln -s bash sh3.5 建立一些必须的配置文件rootubuntu:/mnt/usb# gedit /mnt/usb/etc/inittab在编辑器中

18、输入以下 inittab 的内容::sysinit:/ etc/rc.d/rc.sysinit:askfirst:/bin/sh建立/mnt/usb /etc/rc.d/rc.sysinit 配置文件rootubuntu:/mnt/usb# gedit /mnt/usb/etc/rc.d/rc.sysinit在编辑器中输入以下 rc.sysinit 的内容:$!/bin/shmount-arootubuntu:/mnt/usb# gedit /mnt/usb/etc/fstab在编辑器中输入以下 rc.sysinit 的内容:proc /proc proc defaults 0 0然后修改这三

19、个文件的权限:rootubuntu:/mnt/usb# chmod 644 /mnt/usb/etc/inittab rootubuntu:/mnt/usb# chmod 755 /mnt/usb/etc/rc.d/rc.sysinit rootubuntu:/mnt/usb# chmod 644 /mnt/usb/etc/fstab3.6 复制 Linux 文件到 U 盘中复制编译好的内核到 U 盘cp /home/luck/linux/linux-3.15.1/arch/x86/boot/bzImage /mnt/usb/boot4.安装 grub 到 U 盘中4.1 挂载/dev/sdb

20、2mkdir /mnt/usbmount /dev/sdb1 /mnt/usb4.2 现在先查看/mnt/usb 下是否有文件(做这步是为了和安装好 grub做比较),可以看到还没有# ls /mnt/usblost+found4.3 安装 grub 到 u 盘上grub-install -root-directory=/media/test/ -no-floppy /dev/sdb4.4 再查看/mnt/usb 下是否有文件,可以看到多了很多文件,都是grub 启动所需的必要文件。4.5 安装完 grub 后,还要对其进行配置。这一步是很关键的一步,也是很容易出错,起初用的是 grub2 版

21、本,出现了这些错误:一个是 grub.cfg 编写过程中的 UUID 漏改一个,还有一个文件忘记复制。更改后 grub.cfg 的内容如下:# BEGIN /etc/grub.d/00_header #set default=“0“insmod ext2search -no-floppy -fs-uuid -set=root 3b1d9c1f-ec57-49fa-a08f-69efad575e75insmod gfxterminsmod ext2set timeout=10# END /etc/grub.d/00_header # BEGIN /etc/grub.d/05_debian_the

22、me #set menu_color_normal=white/blackset menu_color_highlight=black/light-gray# END /etc/grub.d/05_debian_theme # BEGIN /etc/grub.d/10_linux #menuentry lucky1insmod ext2search -no-floppy -fs-uuid -set=root 3b1d9c1f-ec57-49fa-a08f-69efad575e75linux /boot/vmlinuz-3.2.0-64-generic-pae root=UUID=3b1d9c1

23、f-ec57-49fa-a08f-69efad575e75 ro quiet splashinitrd /boot/initrd.img-3.2.0-64-generic-pae# END /etc/grub.d/10_linux #然后错误就变成了:搜索资料发现一个论坛里这样说:Cant tell much without a photo; the “swapper/0 not tainted“ is not the error, swapper denotes the process (it is often a false positive) and the not tainted ju

24、st means you dont run proprietary drivers. So, you could try to compile the hard disk controller (IDE / ATA / PATA / SATA / AHCI / .) into the kernel (=Y) as well as the file system; also make sure you have CONFIG_TMPFS=Y, CONFIG_DEVTMPFS=Y and CONFIG_DEVTMPFS_MOUNT=Y.原来是配置 BusyBox 时把支持网络文件系统去掉啦Linu

25、x System Utilities Support mounting NFS file systems 网络文件系统后来又重新编译了一下 busybox,解决了这个问题,然后就又出现了下面的画面: 最后又搜了一些资料,发现关于这个问题的描述都不是很清楚,尝试了几种方法还是没能成功,就有决定换用低版本的 grub,安装方法同上,只是引导文件由 grub.cfg 变成了 menu.list,经过简单配置后,便成功进入了引导界面和命令模式。四 总结及展望:给出本课程报告的总结、收获,并列出本研究报告未进行的工作及未来拟继续开展的工作。本次课程设计给我最大的感触是态度决定一切,只要你自己踏踏实实,一

26、步一个脚印的去做,就一定会有所收获。实践过程最重要的是耐心,要有锲而不舍的精神,只有自己亲自去做了,才会将问题理解得更深刻,才能对知识掌握得更牢固。课设的前一半时间我都在做最基础的工作,安装虚拟机,创建 Ubuntu 系统,反反复复了大概四五遍,一遍又一遍让自己都觉得烦了,可是我想一定要自己做出来,一定不能在困难面前退缩,所以经过细心的检查和一次次的反复,终于最后成功了,我想这种成功之后的快感是其他人无法体会到的,U 盘中那十几个压缩的根文件系统正是我一步步成长进步的见证。 本次课程设计是对这一学期所学大部分知识的一个综合运用,通过此次课程设计使我们巩固了基础知识,也加强了自己的动手能力,对嵌

27、入式系统有了更深入地了解。本次课程设计给了我很大的启发,让我懂得了该如何去学习一项新的东西,当学习的过程中遇到了问题该如何去解决,当遇到问题时,首先还是去百度搜索一下,百度作为最大的搜索平台,是学习过程中重要的工具,在哪里可以找到自己遇到的大部分问题,因为这些东西一些前辈们都已经遇到过了,并且把自己的解决方法,以及经验教训都写了出来,我们可以很好地从哪里获得我们想要的知识。我感觉学到多少知识并不是最重要的,学到一种如何去学习的能力才是最终目的,因为我们将来的学习工作中总是会遇到各种各样的新问题,关键是懂得如何去解决它。另外,还要感谢老师和同学们在本次课程设计中给我的极大帮助和悉心指导。本报告未做的工作,可以在引导文件里加一些,图形界面之类的更加易于交互的界面,由于能力有限,未能实现这个功能。五 参考文献: 【1】嵌入式系统原理与设计 浙大出版社 王勇编著【2】百度文库【3】http:/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报