免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: conke

一个小练习:构建一个基于U盘的Linux系统 [复制链接]

论坛徽章:
0
发表于 2009-11-16 10:57 |显示全部楼层

偶 来 说说

看了大家的方法,自己理解下:

   1.格式化目标磁盘为ext3,mount该磁盘主机根文件系统/work下(也可以在其他目录下);
   2.在/work下见立 dev lib bin proc sys sbin usr boot等目录;
   3.mknod /work/dev/console c 5 1
编译内核并安装:  
   3.在主机上编译目标linux源代码,并安装至work下,过程如下:
        (1)make menuconfig //根据计算机硬件配置linux
        (2)make                 //编译
        (3)make modules_install INSTALL_MOD_PATH=/work/  //安装*.ko到
        (4)make install INSTALL_PATH=/work/boot                //安装vmlinuz到/work/boot下
      (5)验证刚才安装的内核.
   4.验证方法:
        (1)在主机上的/ect/grub/下修改grub配置文件,添加从/work/对应的磁盘起动下起动;
                如:/work磁盘1,内核驱动识别为/sdb1,主机的根文件系统在/sda1上,使用grub2:
            Tile “linux kernel test ”
                root (hd1,0)
                linux /boot/vmlinux.2.6.29 root=/dev/sda1
                boot
        (2) 观察linux是否可以正常起动
建立根文件系统: (具体方法还在实践)
  6.copy库文件至/work/lib
        cp -a /lib/*.so* /work/lib
  7.安装bash sysinit coreutil等
        (2)观查系統起动

   細节待续

[ 本帖最后由 lasting007 于 2009-11-16 13:45 编辑 ]

论坛徽章:
0
发表于 2009-11-16 11:08 |显示全部楼层
原帖由 HELLO_MAX 于 2009-11-16 10:51 发表
回复6楼taoxie17:
     我在U盘上系统:
        grub >  root (hd1,1)     #系统在U盘的第一个分区
        grub >  linux /boot/vmlinuz-2.26.31  root=/dev/sdb1 init=/bin/bash    #我想用U盘来起动bash ...

*************************************************************************************************************
上面的 提示 can't find /bin/bash       是因为rootfs下lib 下没有支持bash运行动态连接库 .

论坛徽章:
0
发表于 2009-11-16 11:11 |显示全部楼层
我在制作rootfs过程中理解和问题
1.在一块新的硬盘上创建简单的目录树,在根目录下创建目录如下etc bin lib sys proc dev sbin usr (sys有什么作用?)
2.如果要run 一个系统,需要一个grub 内核(这里没有用到initrd)
3.copy 一个库到lib(注意符号连接和源文件的关联)
4.这时有内核后,需要一个对外的接口这就需要安装bash.从网上下载一个bash-4.0.tar.gz的压缩包,解压,运行./configure配置并指定安装路径到要装的新硬盘上,运行make make install就会在你指定的路径上的/bin 目录下产生bash bashbug(?什么作用) 这样bash 就做好了。
5.配置grub,引导新硬盘上的kernel,挂载刚才的文件系统,
可以看到系统会进入命令提示符界面,这时还没有结束,如果你敲以下ls cp 等基本命令,你会发现问题?不能执行???
6.这时我就需要安装coreutils包了,core核心utils工具顾名思义就是我们的主要命令集,同bash步骤类似先解压,再配置安装,这时你会在bin目录下看到多了好多可执行文件如ls cp 等
7.这时候你再重启,运行ls你会发现命令就可以执行了。
8sysvinit安装
        请教高手这个包是作什么用的?
        解压进入目录看到src的目录可以执行make 同样可以生成许多可执行文件,是不是系统init进程要调用的文件(库)?
        安装后重启系统会出现runlevel提示符是什么作用?
       
9.这里要注意的是上述软件安装目录,如果不小心覆盖了host的目录内容,会导致host系统崩溃。

论坛徽章:
0
发表于 2009-11-16 11:12 |显示全部楼层
制作rootfs个人体会
   在一个空硬盘上制作根文件系统,先创建几个必要的目录,如boot,proc,sys,dev,bin,sbin,usr等。然后在boot目录下建立grub引导程序,修改menu.lst配置grub的启动选项;编译安装内核,将在这个目录下生成vmlinuz内核文件,系统启动后解压运行该内核。在这里有几个问题。proc,sys两个目录是放置来自内核的信息,具体是何种文件放置于此不是很清楚;dev目录是设备目录,新建时里面没任何设备文件,系统起来后是内核自动设别硬件设备并放于此目录处还是全都由自己创建?;在grub目录下的引导配置文件menu.lst中,kernel命令行,对启动的文件系统后面添加的rw,ro之类参数,怎么设置好?
   几个必要的目录构建完成,并顺利启动内核后,接下来就是编译安装sysvinit,bash,coreutils等源码包,用来搭建命令运行环境。sysvinit编译安装后,在bin目录下生成init可执行程序,这个是系统内核起来后运行的第一个进程。bash包将在bin目录下生成sh,可以运行shell命令。coreutils在bin下生成一些常用的shell命令。但是这些包的具体编译安装方法还很生疏,有待实践。

论坛徽章:
0
发表于 2009-11-16 12:01 |显示全部楼层

回复 #5 setset01 的帖子

第二步: 在目标盘(USB)上安装GRUB
1,setup (hdb1), (后面的数字是,你的USB在电脑上的第几个硬盘)

setup(hdb1)是不对的。应该是setup(hd1) ,hdb1表示第2块硬盘的第一个分区,hd1是grub的setup函数的参数,表示第二块硬盘,
setup过程应该是将grub的stage1写入到第二块硬盘的MBR中,而不是写入到硬盘的分区中。

[ 本帖最后由 forkpower 于 2009-11-16 12:02 编辑 ]

论坛徽章:
0
发表于 2009-11-16 12:37 |显示全部楼层
原帖由 syukayo 于 2009-11-16 11:12 发表
proc,sys两个目录是放置来自内核的信息,具体是何种文件放置于此不是很清楚;dev目录是设备目录,新建时里面没任何设备文件,系统起来后是内核自动设别硬件设备并放于此目录处还是全都由自己创建?;在grub目录下的引导配置文件menu.lst中,kernel命令行,对启动的文件系统后面添加的rw,ro之类参数,怎么设置好?
   几个必要的目录构建完成,并顺利启动内核后,接下来就是编译安装sysvinit,bash,coreutils等源码包,用来搭建命令运行环境。 sysvinit编译安装后,在bin目录下生成init可执行程序,这个是系统内核起来后运行的第一个进程。bash包将在bin目录下生成sh,可以运行shell命令。coreutils在bin下生成一些常用的shell命令。但是这些包的具体编译安装方法还很生疏,有待实践。


我的理解是:
proc目录可能是放置内核进程调度时的一些进程信息,dev目录利用mount命令可以看出是用tmpfs文件系统挂载的,tmpfs可以看成是内存中的临时文件系统,可以用ls -l命令查看创建时间,都是同时创建的,可以推断dev目录下的设备文件是系统启动时系统生成的。

论坛徽章:
0
发表于 2009-11-16 13:41 |显示全部楼层

回复 #1 conke 的帖子

这里主要补充说明一下需要准备的工具有哪些
gcc,g++,make 这三个软件都是配置编译文件所必须要的
libncureses5-dev 这是配置内核的工具,能给内核配置提供一个可视化的界面以提升效率
nfs-common,smbfs 网络工具 主要用于共享网络上其它主机或服务器的文件(也包括windows的)
bzip2是一个压缩软件

以上文件都可以通过apt-get来安装,比如:apt-get install gcc g++ make libncurese5-dev nfs-common smbfs bzip2

论坛徽章:
0
发表于 2009-11-16 14:26 |显示全部楼层
原帖由 forkpower 于 2009-11-16 12:01 发表
第二步: 在目标盘(USB)上安装GRUB
1,setup (hdb1), (后面的数字是,你的USB在电脑上的第几个硬盘)

setup(hdb1)是不对的。应该是setup(hd1) ,hdb1表示第2块硬盘的第一个分区,hd1是grub的setup函数的 ...




setup(hd1)也是不对的,setup (hd1)才对。

论坛徽章:
0
发表于 2009-11-17 16:57 |显示全部楼层

回复 #18 HELLO_MAX 的帖子

请问 (hd1)是什么啊?
到底是(hd1)还是(hdb1)??

论坛徽章:
0
发表于 2009-11-28 14:22 |显示全部楼层

版主你好,请问你是Maxwit魔鬼训练营的嵌入式linux内核/驱动开发班的主讲吗?

版主你好,我想了解一下情况,请问你是不是在Maxwit魔鬼训练营的嵌入式linux内核/驱动开发班是主讲啊?我准备参加个嵌入式培训呢,想了解一下Maxwit魔鬼训练营的相关情况呢。还有如果是的话,请问你们Maxwit魔鬼训练营相对其他的嵌入式培训机构有什么优势呢?还有请问你们培训中主要用的那个系列型号的开发板?望老师回复,谢谢。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP