..

㈠ 利用Busybox如何构建一个最小的linux系统

为了方便和简化嵌入式Linux开发过程中的调试过程,主要研究了如何使用Busybox构建出基本的嵌入式Linux根文件系统,包括Busybox的配置、编译和安装。在此基础上,进一步构建出基于NFS的嵌入式Linux根文件系统,并给出了启动脚本和配置文件。这种根文件系统可以方便地在线更改、调试程序,降低了嵌入式系统的开发门槛。随着信息技术的发展,嵌入式系统技术已经广泛应用于国防、通信、工业控制、消费电子等诸多领域。其中,Linux作为一款开源、成熟且高效稳定的多任务操作系统,先天具有许多不可比拟的优势,已成为目前最具潜力的嵌入式操作系统。众所周知,构建根文件系统对于嵌入式Linux开发至关重要,它是内核启动后加载的第1个文件系统,是决定系统能否正常启动的关键所在。在开发阶段,程序往往需要反复多次的调试,鉴于此,构建基于NFS(Network File System)的根文件系统就尤为重要;这样就免去了对目标开发板的反复烧写,方便地在线对程序进行更改与调试。本文以Busybox软件为基础,介绍了一种实用的NFS根文件系统构建方法。1 嵌入式根文件系统简介Linux启动时,第一个必须挂载的就是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会报错进而退出启动。系统成功启动之后,才可以自动或手动挂载其他的文件系统。Linux系统各个分区存储文件时,需要遵循一定的格式,这种文件格式称为文件系统类型,比如常见的有ext2,ext3,ext4等。在存储设备方面,FLASH是目前嵌入式系统中广泛采用的主流存储设备,它是一种可电擦写的非易失性存储器,具有体积小,功耗低,密度高等优点。目前FLASH中常见的文件系统主要有Cramfs,Jffs2,Yaffs2等。嵌入式Linux基本的根文件目录结构如表1所示。 2 Busybox简介 Busybox常被形象地称为嵌入式Linux系统开发中的“瑞士军刀”,它将许多常用的UNIX命令和工具结合到了一个单独的可执行程序中。虽然与相应的GNU工具相比较,Busybox所提供的功能和参数略少,但在比较小的系统或者嵌入式系统中已经足够了。它仅用一个可执行文件就可以提供基本的Linux操作系统所需的命令,体积很小,配置起来也很方便。

㈡ 如何创建自己小型的linux 系统运行在windows系统上

ubuntu 主要以娱乐为主,大部分从windows转型到linux的人都会选择ubuntu,因为更新速度快,版每六个月会出一个新版本权,而且,论坛的人气也是最旺的,软件更新最快,你可以在ubuntu下安装任何你可能需要的软件,而且版本非常多。如果你想专业学习的话,可以使用fedora,这个系统与linux红帽子差不多,都有红帽子的工程师参与开发的,与ubuntu的区别是系统更新时间不一样,软件管理的方式不一样。你要学会很多简单的命令,比如安装软件在ubuntu下是sudo apt-get install ****.在fedora下是yum install ***** 这样的区别,其实要是建设服务器,建议使用fedora或者红帽子。同样的,ubuntu也可以搭建服务器。如果你没有基础的话,建议先使用ubuntu,因为人气旺,有了问题,很多人都可以帮你解决。如果觉得没问题了,想搞开发,可以使用fedora,入门就更简单了。linux本身不分等级,因为不管是什么版本,使用的都是linux内核。他们之间区别不大,一通则百通。使用ubuntu吧,除了问题好解决

㈢ 如何制作一个基于Linux的操作系统

LFS就是干这个的,www.linuxfromscratch.org。另有一些项目可供参考:XPUD、tinycore、Rock Linux、babylinux等。最简单的情形,只内需要会制作容initramfs就可以了;复杂点的,软件编译和源码修改自然是有帮助的,可以参考LFS中的介绍,以及现有项目的做法。不建议从头来做,如果有这样的能力和精力,可以考虑参与到现有的发行版开发当中去。

㈣ 如何制作最简minilinux

自己定制linux系统这个是需要非常了解和理解linux内核和其他系统代码方面知识才能完成的(以下是知识准备):Linux的启动过程原理initramfs的本质,如何编译内核,制作OpenStack镜像的根本原理initramfs, 内核,镜像之间的关系chroot的根本原理,以及网上将linux安装在arm的安卓手机的基本原理简要说下系统定制的基本流程(步骤):创建工作目录使用busybox生成根文件系统中的bin等目录创建服务启动脚本与inittab文件与fstab文件创建根文件系统的init脚本(initrc使用linuxrc,而initramfs使用init脚本,所以先删除busybox为initrc生成的默认的linuxrc文件,rm-rf$LINUX/linuxrc),init文件可以是任何ELF格式的可执行性文件,例如如果是一个编译过的C程序也是可以的,记得安装编译c文件要用到的库:sudoyum install -y glibc-static libstdc++-static。使用chroot在未make内核之前就可以先测试initramfs构建initramfs,先配置支持Generalsetup -> Initial RAM filesystem and RAM disk (initramfs/initrd)support (默认就是支持的),再将linux内核的CONFIG_INITRAMFS_SOURCE(Generalsetup -> initramfs sourcefile(s))指向这个目录,然后执行make命令内核就会自动构建生成initramfs了(是一个压缩过的cpio档案文件),并且将它链接到内核镜像中。调试验证。可以使用物理机验证,也可以采用qemu虚机验证。如果使用物理机来验证的话,本来可以直接使用makeinstall命令自动安装,但最好不要这么做,因为它会自动执行updategrub命令来破坏你的grub文件,可以手工做:initramfs是一个最小化的根文件系统,它的根本目的是为了为切换到新的根文件系统做准备。initrd方式使用pivot_root命令切换到新的根文件系统,然后卸载ramdis,但是initramfs方式由于它是本身就是rootfs(rootfs是ramfs的一个实例)位于内存中,所以它既不能pivot_root,也不能umount,是常驻内存的。对模块的支持,到目前为止,我们在构建initramfs时还没有涉及内核模块的支持,所用到的硬件驱动程序都是直接编译到内核中。现在我们就看看如何使initramfs支持内核模块。总结:整个过程是,initrc或者initramfs都是一个运行在内存的小根文件系统,它有一个叫init的脚本,做完一些准备工作之后,如加载硬件的驱动,然后会切换到镜像所在的新根文件系统上。

㈤ 如何才能自己写一个简单的linux操作系统

只要你学过汇编和C,只满足于写个“简单的操作系统",一两天就能搞定。随便把你写过的小程序,用直接写硬盘软件(或者自己编一个,调用winapi的WriteFile函数就可以),写进硬盘/U盘引导区。记住,起始地址是7c00。这就好了。注意,引导区只有440个字节给你用,程序不能太大,所以这部分基本要用汇编写。440字节后面是硬盘/U盘分区信息,不可以乱动。乱动以后bios可能没法识别硬盘/U盘。引导区最后两个字节必须是55AA,不过一般你不用管,硬盘/U盘格式化的时候都已经给你写好了。这样你的程序就在开机的时候直接运行了。想调用大程序也没问题,你需要写个不超过440字节的程序,负责把第二个扇区的内容载入内存并执行,由第二个扇区的代码负责把所有代码载入内存。后面的部分用C写或者别的高级语言写都没什么问题了。至于你想要具体作什么,就写什么,屏幕上画个画,管管硬盘上的文件,和用户互动一下,你随意。和你平常写程序没啥两样。总之一个能完成任务的简单操作系统就完事了。最多几天时间你就能搞定。这差不多能搞个接近dos1.0的“简单操作系统”。不过接下来才是你真正要学的。例如文件管理,内存管理,保护模式,进程管理啥的。麻烦归麻烦,但解放了自由了,终于可以编写内核态才准用的代码了,做的事情全部都是用户态下面不让做的事情。操作系统的学习,从这里才算真正开始。

㈥ 自己如何来做一个小型的可以安装的linux系统

首先要学习LINUX的底层东西,如硬件驱动等,对内核非常了解,现在linux驱动还是一个大问题,还有就是封装软件,优化安装方式,这些事基本都是一个团队去做的,一个人很难搞。

㈦ 如何定制小型的linux系统,具体的步骤,谢谢了

系统启动过程1、加电自检(POST代码)2、boot loaderGRUB -- /boot/grub/grub.confkernel initrd.img3、INIT/sbin/init ----- /etc/inittab/etc/rc.d/rc.sysinit/etc/rc.d/rc RUNLEVEL/etc/rc$runlevel.d/S* start/etc/rc$runlevel.d/K* stop/etc/X11/prefdm4、登录文本 login图形 gdm/kdm自制一个U盘系统准备工作:在真实机中把yum配置好[[email protected] /]# ls /mnt/Server/ 这是软件包所处的目录[[email protected] /]# cd /etc/yum.repos.d/ [[email protected] yum.repos.d]# lsrhel-debuginfo.repo[[email protected] yum.repos.d]# cp rhel-debuginfo.repo pg.repo [[email protected] yum.repos.d]# vim pg.repo [[email protected] yum.repos.d]# cat pg.repo [rhel-server]name=Red Hat Enterprise Linuxbaseurl=file:///mnt/Serverenabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release1、准备U盘,并分区,格式化成ext3(可选)文件系统[[email protected] pg]# fdisk -l[[email protected] pg]# fdisk -l Disk /dev/sda: 4003 MB, 4003463168 bytes84 heads, 20 sectors/track, 4654 cylindersUnits = cylinders of 1680 * 512 = 860160 bytesDevice Boot Start End Blocks Id System/dev/sda1 * 5 4655 3905600 c W95 FAT32 (LBA)[[email protected] pg]# fdisk /dev/sdaThe number of cylinders for this disk is set to 4654.There is nothing wrong with that, but this is larger than 1024,and could in certain setups cause problems with:1) software that runs at boot time (e.g., old versions of LILO)2) booting and partitioning software from other OSs(e.g., DOS FDISK, OS/2 FDISK)Command (m for help): dSelected partition 1Command (m for help): pDisk /dev/sda: 4003 MB, 4003463168 bytes84 heads, 20 sectors/track, 4654 cylindersUnits = cylinders of 1680 * 512 = 860160 bytesDevice Boot Start End Blocks Id SystemCommand (m for help): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-4654, default 1): Using default value 1Last cylind[[email protected] pg]# mount -t ext3 /dev/sda1 /neter or +size or +sizeM or +sizeK (1-4654, default 4654): Using default value 4654Command (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.The kernel still uses the old table.The new table will be used at the next reboot.Syncing disks.[[email protected] pg]# partprobe /dev/sda[[email protected] pg]# ls /dev/sda1/dev/sda1--------------[[email protected] pg]# mkfs.ext3 /dev/sda12、挂载U盘,并把相关文件拷到U盘中[[email protected] pg]# mount -t ext3 /dev/sda1 /net把/目录树结构在u盘创建好]# yum --installroot=/net -y install filesystem /boot 这个目录应该有vmlinuz-x.x.x initrd-x.x.x.img/boot/grub 这个目录中应该有grub的相关文件grub还要安装到u盘的首扇区中(grub-install)/bin /sbin /lib /usr/lib 这些个目录下应该有一些命令和库文件bash ls cp mv mountifconfigfdiskmkfs.ext3 基本上你需要的程序比较多,大概有以下一些常用的:coreutils setup grub vim-enhancedvim-common gpm perl iptablesopenssh openssh-clientsmole-init-tools iputils grep awk sedprocps tar bash gcc make rp-pppoepasswd libuser e2fsprogs util-linuxnet-tools SysVinit kernel-----------------------a.关于vmlinuz文件:]# cp /boot/vmlinuz-2.6.18-194.el5 /net/boot/b.关于initrd.img文件: 为了包含u盘的驱动,需要手动生成initrd.img(包含usb-storage)]# modinfo -F filename usb-storage ]# mkinitrd --with=usb-storage /net/boot/initrd-usb-2.6.18-194.img `uname -r`c. 使用此命令grub-install将grub安装到u盘的首扇区中grub-install 需要安装grub软件包生成]# yum --installroot=/net -y install grub]# grub-install /dev/sda 最后执行这一步,还有一些必要工作没做d. ]# cat /net/boot/grub/grub.conf default=0timeout=5title RHEL5U5 usb linux for pgroot (hd0,0)kernel /boot/vmlinuz-2.6.18-194.el5 ro root=/dev/sda1initrd /boot/initrd-usb-2.6.18-194.imge. 为了生成以下这些常用的命令,装包bash ls cp mv mountifconfigfdiskmkfs.ext3 yum bash ls cp mv mountifconfigfdiskmkfs.ext3 yum --installroot=/net -y install coreutils setup grub vim-enhanced vim-common gpm perl iptables openssh openssh-clients mole-init-tools iputils grep awk sed procps tar bash gcc make rp-pppoe passwd libuser e2fsprogs util-linux net-tools SysVinit kernel pamf.在U盘系统启动的时候,需要读fstab文件,挂载文件系统]# cp /etc/fstab /net/etc]# vim /net/etc/fstab]# cat /net/etc/fstab/dev/sda1 / ext3 defaults 0 0开始安装GRUB程序]# chroot /net/bash-3.2# ]# chroot /net/bash-3.2# grub-install /dev/sdaProbing devices to guess BIOS drives. This may take a long time.No suitable drive was found in the generated device map. 这个错误意味着需要去写devices.map文件bash-3.2# ls /dev/sdals: /dev/sda: 没有那个文件或目录bash-3.2# ls /dev/sda1ls: /dev/sda1: 没有那个文件或目录bash-3.2# mknod /dev/sda b 8 0bash-3.2# mknod /dev/sda1 b 8 1bash-3.2# cat /etc/mtab /dev/sda1 / ext3 rw 0 0bash-3.2# cat /boot/grub/device.map (fd0) /dev/fd0(hd0) /dev/sdabash-3.2# grub-install /dev/sdaCould not find device for /dev/mapper/*Could not find device for /dev/mapper/*Could not find device for /dev/mapper/*Installation finished. No error reported.This is the contents of the device map /boot/grub/device.map.Check if this is correct or not. If any of the lines is incorrect,fix it and re-run the script `grub-install'.(fd0) /dev/fd0(hd0) /dev/sda]# chroot /net/bash-3.2# passwd root 修改密码不成功,将导致 u盘系统启动后,用root登录不成功。Changing password for user root.passwd: Authentication token manipulation error解决方法: vim /net/etc/passwdroot:*:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bash 这样再把root密码设置为你想要的!检查 以下过程是否正确:/boot/grub/grub.conf/etc/inittab ---默认运行级别应该是3/etc/fstab /etc/passwd/etc/shadow pam程序包做验证的ls /dev/sda /dev/sda1]# chroot /net/bash-3.2# passwd root 这一步必须能成功---------------------------------------[[email protected] pg]# rpm -q kernel-dockernel-doc-2.6.18-194.el5[[email protected] pg]# gedit /usr/share/doc/kernel-doc-2.6.18/Documentation/devices.txt

㈧ 如何制作自己的LINUX系统

自己定制linux系统这个是需要非常了解和理解linux内核和其他系统代码方面知识才能完成的(以下是知识准备):

Linux的启动过程原理

initramfs的本质,如何编译内核,制作OpenStack镜像的根本原理

initramfs,内核,镜像之间的关系

chroot的根本原理,以及网上将linux安装在arm的安卓手机的基本原理

简要说下系统定制的基本流程(步骤):

创建工作目录

使用busybox生成根文件系统中的bin等目录

创建服务启动脚本与inittab文件与fstab文件

创建根文件系统的init脚本(initrc使用linuxrc,而initramfs使用init脚本,所以先删除busybox为initrc生成的默认的linuxrc文件,rm-rf$LINUX/linuxrc),init文件可以是任何ELF格式的可执行性文件,例如如果是一个编译过的C程序也是可以的,记得安装编译c文件要用到的库:sudoyum install -y glibc-static libstdc++-static。

使用chroot在未make内核之前就可以先测试initramfs

构建initramfs,先配置支持Generalsetup -> Initial RAM filesystem and RAM disk (initramfs/initrd)support (默认就是支持的),再将linux内核的CONFIG_INITRAMFS_SOURCE(Generalsetup -> initramfs sourcefile(s))指向这个目录,然后执行make命令内核就会自动构建生成initramfs了(是一个压缩过的cpio档案文件),并且将它链接到内核镜像中。

调试验证。可以使用物理机验证,也可以采用qemu虚机验证。如果使用物理机来验证的话,本来可以直接使用makeinstall命令自动安装,但最好不要这么做,因为它会自动执行updategrub命令来破坏你的grub文件,可以手工做:

initramfs是一个最小化的根文件系统,它的根本目的是为了为切换到新的根文件系统做准备。initrd方式使用pivot_root命令切换到新的根文件系统,然后卸载ramdis,但是initramfs方式由于它是本身就是rootfs(rootfs是ramfs的一个实例)位于内存中,所以它既不能pivot_root,也不能umount,是常驻内存的。

对模块的支持,到目前为止,我们在构建initramfs时还没有涉及内核模块的支持,所用到的硬件驱动程序都是直接编译到内核中。现在我们就看看如何使initramfs支持内核模块。

总结:

整个过程是,initrc或者initramfs都是一个运行在内存的小根文件系统,它有一个叫init的脚本,做完一些准备工作之后,如加载硬件的驱动,然后会切换到镜像所在的新根文件系统上。

㈨ 怎样动手制作一个小型的Linux操作系统

首先build Kernel核心然后配置安装源安装open box图形界面或者GNOME CLASSIC登陆后安装驱动浏览器,office。。。。。。