收藏 分销(赏)

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

上传人:二*** 文档编号:4575407 上传时间:2024-09-30 格式:DOCX 页数:17 大小:1.30MB 下载积分:5 金币
下载 相关 举报
从零开始构建自己的U盘Linux.docx_第1页
第1页 / 共17页
本文档共17页,全文阅读请下载到手机保存,查看更方便
资源描述
课程设计报告 课程名称: 嵌入式系统原理与设计 姓 名: 学 号: 班 级: 专 业: 电子信息科学与技术 从零开始构建自己的U盘Linux 一. 摘要:介绍本报告的主要内容。 本报告是关于在Ubuntu系统下,通过一些基础操作,来构建一个U盘Linux,方法虽然比直接用现成的工具软件方便,但是可以让我们了解Linux的基本开发过程,是学习嵌入式的很好的一个方法。 主要内容是构建过程中的基本方法,在这个过程中遇到的一些问题,以及查询资料,解决问题的过程。 二. 引言:说明本课程报告所选知识点相关技术的意义。 目前的主板BIOS都支持USB和硬盘的启动方式,这样对于Windows的系统维护与安装工作越来越方便,在优盘上建立Linux启动盘,对于系统维护人员具有更加实用的意义。 USB闪存存储装置(优盘)由于具有轻巧精致、经常用来在PC之间交换文件。目前新出的主板BIOS都支持USB和硬盘的启动方式,这样对于Windows的系统维护与安装工作越来越方便。 三. U盘的构建步骤。 1.准备工作 1.1 准备开发主机 首先在电脑上安装虚拟机VMWare,然后将下载的Ubuntu镜像安装在该虚拟机上,安装后如图: 1.2准备测试用计算机 本次过程中测试用计算机即是本机,当U盘做好后,将本机BIOS设置为从USB启动,然后在插着U盘时开机既可测试。 1.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.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-get upgrade sudo apt-get install libncurses5-dev libncursesw5-dev 然后就开始配置将一些必要的选项打[*]或[ ]: BusyBox SettingàBuild Options [*]Build Busybox as a static binary (no shared libs) Shellsàchose your default shell(ash): [*]ash [ ]hush [ ]msh 1.45编译BusyBox,命令如下: # make 在执行make时出现了一个错误经过查找资料发现可以这样解决: 只要把make menuconfig 去掉如下选项 Linux 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 下载Linux内核压缩之后就可以配置的,编译内核了,具体操作如下  我下载的是linux-3.15.1.tar.xz 文件解压如下tar –J linux-3.15.1.tar.xz    cd   /home/    sudo tar –J linux-3.15.1.tar.xz    make menuconfig  //进行内核编译 需要注意是由于支持U盘启动,配置内核时必须选择以下内容: 选择Device Devices(设备驱动) ->Block devices 下的loopback device support, RAMblock device support 选择Device Devices->SCSI Support, SCSI disk Support, SCSI low-dri vers-Buslogic SCSI support 等支持; (3) 选择Device Devices->USB Support 下的Support for Host-side U SB,Preliminary USB device filesystem ,USB Mass Storage support 支持;另外,还需要选UHCI HCD support 或OHCI HCD support  选择后选择保存 使用“make dep”命令寻找依赖关系,由系统决定需要编译那些内容  使用“make clean”命令清除以前编译内核时生成中 间文件等。 使用“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 free)    e   extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-16179199, default 2048):  Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-16179199, default 16179199): +512M输入+512M,在U盘上建立一个512M大小的分区。 Command (m for help): p输入p查看是否分区成功。 Disk /dev/sdb: 8283 MB, 8283750400 bytes 2 heads, 63 sectors/track, 128406 cylinders, total 16179200 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00372dfa    Device Boot      Start         End      Blocks   Id  System /dev/sdb1            2048     1050623      524288   83  Linux Command (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 used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. 卸载优盘: umount /dev/sdb1 创建文件系统: mkfs.ext2 /dev/sdb1 执行过程截图如下: 3.2建立必须的目录 操作如下: root@ubuntu:/home/luck# mkdir /mnt/usb root@ubuntu:/home/luck# mount /dev/sdb1 /mnt/usb root@ubuntu:/home/luck# cd /mnt/usb mkdir boot etc etc/rc.d proc tmp var dev mnt lib initrd chmod 755 boot etc etc/rc.d proc tmp var dev mnt lib initrd 3.3建立必须的设备节点文件 操作如下: root@ubuntu:/mnt/usb# cd dev root@ubuntu:/mnt/usb/dev# mknod tty c 5 0 root@ubuntu:/mnt/usb/dev# mknod console c 5 1 root@ubuntu:/mnt/usb/dev# chmod 666 tty console root@ubuntu:/mnt/usb/dev# mknod tty0 c 4 0 root@ubuntu:/mnt/usb/dev# chmod 666 tty0 root@ubuntu:/mnt/usb/dev# mknod ram0 b 1 0 root@ubuntu:/mnt/usb/dev# chmod 600 ram0 root@ubuntu:/mnt/usb/dev# mknod null c 1 3 root@ubuntu:/mnt/usb/dev# chmod 666 null 3.4生成一些常见的命令和工具 root@ubuntu:/mnt/usb/dev# cp -a -R -f /home/luck/busybox/busybox-1.21.0/_install/* /mnt/usb/ root@ubuntu:/mnt/usb/dev#cd /bin root@ubuntu:/mnt/usb/dev#ln –l sh root@ubuntu:/mnt/usb/dev#ldd bash 从此处可以看出需要哪些库的支持,需要把这些库复制到U盘中。 root@ubuntu:/bin# cp /bin/bash /mnt/usb/bin root@ubuntu:/bin# cp /lib/i386-linux-gnu/libtinfo.so.5 /mnt/usb/lib root@ubuntu:/bin# cp /lib/i386-linux-gnu/libdl.so.2 /mnt/usb/lib root@ubuntu:/bin# cp /lib/i386-linux-gnu/libc.so.6 /mnt/usb/lib root@ubuntu:/bin# cp /lib/ld-linux.so.2 /mnt/usb/lib root@ubuntu:/bin# cd /mnt/usb/bin root@ubuntu:/mnt/usb/bin#rm sh 此处需将原来的sh文件删除 root@ubuntu:/mnt/usb/bin# ln -s bash sh 3.5建立一些必须的配置文件 root@ubuntu:/mnt/usb# gedit /mnt/usb/etc/inittab 在编辑器中输入以下inittab的内容: ::sysinit:/ etc/rc.d/rc.sysinit ::askfirst:/bin/sh 建立/mnt/usb /etc/rc.d/rc.sysinit配置文件 root@ubuntu:/mnt/usb# gedit /mnt/usb/etc/rc.d/rc.sysinit 在编辑器中输入以下rc.sysinit的内容: $!/bin/sh mount-a root@ubuntu:/mnt/usb# gedit /mnt/usb/etc/fstab 在编辑器中输入以下rc.sysinit的内容: proc /proc proc defaults 0 0 然后修改这三个文件的权限: root@ubuntu:/mnt/usb# chmod 644 /mnt/usb/etc/inittab root@ubuntu:/mnt/usb# chmod 755 /mnt/usb/etc/rc.d/rc.sysinit root@ubuntu:/mnt/usb# chmod 644 /mnt/usb/etc/fstab 3.6复制Linux文件到U盘中 复制编译好的内核到U盘 cp /home/luck/linux/linux-3.15.1/arch/x86/boot/bzImage /mnt/usb/boot 4.安装grub到U盘中 4.1挂载/dev/sdb2 mkdir /mnt/usb mount /dev/sdb1 /mnt/usb 4.2现在先查看/mnt/usb下是否有文件(做这步是为了和安装好grub做比较),可以看到还没有 # ls /mnt/usb lost+found 4.3安装grub到u盘上 grub-install --root-directory=/media/test/ --no-floppy /dev/sdb 4.4再查看/mnt/usb下是否有文件,可以看到多了很多文件,都是grub启动所需的必要文件。 4.5安装完grub后,还要对其进行配置。 这一步是很关键的一步,也是很容易出错,起初用的是grub2版本, 出现了这些错误: 一个是grub.cfg编写过程中的UUID漏改一个,还有一个文件忘记复制。 更改后grub.cfg的内容如下: ### BEGIN /etc/grub.d/00_header ### set default="0" insmod ext2 search --no-floppy --fs-uuid --set=root 3b1d9c1f-ec57-49fa-a08f-69efad575e75 insmod gfxterm insmod ext2 set timeout=10 ### END /etc/grub.d/00_header ### ### BEGIN /etc/grub.d/05_debian_theme ### set menu_color_normal=white/black set menu_color_highlight=black/light-gray ### END /etc/grub.d/05_debian_theme ### ### BEGIN /etc/grub.d/10_linux ### menuentry 'lucky1'{ insmod ext2 search --no-floppy --fs-uuid --set=root 3b1d9c1f-ec57-49fa-a08f-69efad575e75 linux /boot/vmlinuz-3.2.0-64-generic-pae root=UUID=3b1d9c1f-ec57-49fa-a08f-69efad575e75 ro quiet splash initrd /boot/initrd.img-3.2.0-64-generic-pae } ### END /etc/grub.d/10_linux ### 然后错误就变成了: 搜索资料发现一个论坛里这样说: Can't 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 just means you don't 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时把支持网络文件系统去掉啦 Linux System Utilities  —>  [ ]   Support mounting NFS file systems 网络文件系统 后来又重新编译了一下busybox,解决了这个问题,然后就又出现了下面的画面: 最后又搜了一些资料,发现关于这个问题的描述都不是很清楚,尝试了几种方法还是没能成功,就有决定换用低版本的grub,安装方法同上,只是引导文件由grub.cfg变成了menu.list,经过简单配置后,便成功进入了引导界面和命令模式。 四. 总结及展望:给出本课程报告的总结、收获,并列出本研究报告未进行的工作及未来拟继续开展的工作。  本次课程设计给我最大的感触是态度决定一切,只要你自己踏踏实实,一步一个脚印的去做,就一定会有所收获。实践过程最重要的是耐心,要有锲而不舍的精神,只有自己亲自去做了,才会将问题理解得更深刻,才能对知识掌握得更牢固。课设的前一半时间我都在做最基础的工作,安装虚拟机,创建Ubuntu系统,反反复复了大概四五遍,一遍又一遍让自己都觉得烦了,可是我想一定要自己做出来,一定不能在困难面前退缩,所以经过细心的检查和一次次的反复,终于最后成功了,我想这种成功之后的快感是其他人无法体会到的,U盘中那十几个压缩的根文件系统正是我一步步成长进步的见证。 本次课程设计是对这一学期所学大部分知识的一个综合运用,通过此次课程设计使我们巩固了基础知识,也加强了自己的动手能力,对嵌入式系统有了更深入地了解。 本次课程设计给了我很大的启发,让我懂得了该如何去学习一项新的东西,当学习的过程中遇到了问题该如何去解决,当遇到问题时,首先还是去百度搜索一下,百度作为最大的搜索平台,是学习过程中重要的工具,在哪里可以找到自己遇到的大部分问题,因为这些东西一些前辈们都已经遇到过了,并且把自己的解决方法,以及经验教训都写了出来,我们可以很好地从哪里获得我们想要的知识。我感觉学到多少知识并不是最重要的,学到一种如何去学习的能力才是最终目的,因为我们将来的学习工作中总是会遇到各种各样的新问题,关键是懂得如何去解决它。 另外,还要感谢老师和同学们在本次课程设计中给我的极大帮助和悉心指导。 本报告未做的工作,可以在引导文件里加一些,图形界面之类的更加易于交互的界面,由于能力有限,未能实现这个功能。 五. 参考文献: 【1】嵌入式系统原理与设计 浙大出版社 王勇编著 【2】百度文库 【3】 【4】 【5】
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服