-
如何构建自己的Linux系统发行版
2020-03-04 11:23:43Linux From Scratch (LFS) 及其后代代表一种新方法,向用户揭示 Linux 操作系统是如何工作的。LFS 基于这样的假设,即一部分一部分地编译完整的操作系统不仅能够...本文将为大家介绍如何构建自己的Linux系统发行版 。 -
手把手教你构建自己的LINUX系统.part1
2014-09-22 09:14:54《手把手教你构建自己的Linux系统》以如何使用源代码搭建一套Linux系统这一独特的角度介绍Linux系统的构成,主要内容包括走进GNU/Linux、LFS,Linux系统定制原理,制作GNU/Linux系统的准备工作,本地定制GNU/Linux... -
手把手教你构建自己的LINUX系统.part3.rar
2016-01-14 13:35:15《手把手教你构建自己的Linux系统》以如何使用源代码搭建一套Linux系统这一独特的角度介绍Linux系统的构成,主要内容包括走进GNU/Linux、LFS,Linux系统定制原理,制作GNU/Linux系统的准备工作,本地定制GNU/Linux... -
手把手教你构建自己的Linux系统(pdf文字版)
2018-12-19 21:03:44手把手教你构建自己的Linux系统》以如何使用源代码搭建一套Linux系统这一独特的角度介绍Linux系统的构成,主要内容包括走进GNU/Linux、LFS,Linux系统定制原理,制作GNU/Linux系统的准备工作,本地定制GNU/Linux系统... -
如何构建自己的 Linux 发行版
2020-03-04 09:56:18用户要更改构建 Linux 发行版的方式,不必要是程序员:只要从构建 LFS 系统学到的一点脚本编写能力就足够了。LFS 专家可以改变和扩展 Linux 发行版的完美组合,而不会影响它的基本结构。对于有人员和专家维护 Linux ... -
构建自己的Linux 之一 基本框架
2011-08-17 21:31:38构建自己的Linux 之一 基本框架 自己动手构建一个Linux不仅可以加深对Linux的理解,对嵌入式Linux的学习也有很大的帮助。构建一个自己的Linux(内核的编译,文件系统的制作,图形界面,驱动等)和开发嵌入式Linux...构建自己的Linux 之一 基本框架
自己动手构建一个Linux不仅可以加深对Linux的理解,对嵌入式Linux的学习也有很大的帮助。构建一个自己的Linux(内核的编译,文件系统的制作,图形界面,驱动等)和开发嵌入式Linux的过程基本一样。
1开发环境
RedFlag Linux 6.0
VMware 7.1.3build-324285
2 添加磁盘
添加一个新的虚拟硬盘,硬盘类型选择“IDE”,如下图所示:
注意:一定选择IDE类型的虚拟磁盘,否则系统无法识别磁盘,会无法挂载文件系统!,在initrd.img中还要插入相应的内核模块。
3查看磁盘
启动虚拟机,在终端下查看刚刚添加的硬盘
[root@localhost ~]# fdisk -l ... Disk /dev/sdc: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280bytes Disk /dev/sdc doesn't contain a validpartition table
4给硬盘分区
[root@localhost ~]# fdisk /dev/sdc Device contains neither a valid DOSpartition table, nor Sun, SGI or OSF disklab el Building a new DOS disklabel. Changes willremain in memory only, until you decide to write them. After that,of course, the previous content won't be recoverable. The number of cylinders for this disk isset to 1044. There is nothing wrong with that, but thisis larger than 1024, and could in certain setups cause problemswith: 1) software that runs at boot time (e.g.,old versions of LILO) 2) booting and partitioning software fromother OSs (e.g., DOS FDISK, OS/2 FDISK) Warning: invalid flag 0x0000 of partitiontable 4 will be corrected by w(rite) Command (m for help): n //添加一个新的分区 Command action e extended p primary partition (1-4) p //选择主分区 Partition number (1-4): 1 First cylinder (1-1044, default 1): 1 Last cylinder or +size or +sizeM or +sizeK(1-1044, default 1044): +100M//boot分区为100M Command (m for help): n Command action e extended p primary partition (1-4) p //添加一个新的分区 Partition number (1-4): 2 First cylinder (14-1044, default 14): 14 Last cylinder or +size or +sizeM or +sizeK(14-1044, default 1044): +2048M//主分区为2G Command (m for help): w //写入分区表 The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
5查看分区
[root@localhost ~]# fdisk -l Disk /dev/sdc: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280bytes Device Boot Start End Blocks Id System /dev/sdc1 1 13 104391 83 Linux /dev/sdc2 14 263 2008125 83 Linux
6格式化为ext3格式
[root@localhost ~]# mke2fs -j /dev/sdc1 [root@localhost ~]# mke2fs -j /dev/sdc2
7安装grub
[root@localhost ~]#mkdir /mnt/boot [root@localhost ~]#mkdir /mnt/sysroot [root@localhost ~]# mount /dev/sdc1/mnt/boot //挂载分区 [root@localhost ~]# mount /dev/sdc2/mnt/sysroot//挂载分区 [root@localhost ~]# grub-install--root-directory=/mnt/ /dev/sdc //安装grub
修改/mnt/boot/grub/device.map,只留下(hd0) /dev/sda
8修改initrd
关于initrd的更多的资料,可以参看我前面写的文章(linux 2.6内核initrd.img文件分析)。
[root@localhost ~]#cp /boot/vmlinuz-2.6.23.1-4/mnt/boot/vmlinuz [root@localhost ~]#cp /boot/initrd-2.6.23.1-4.img/mnt/boot/initrd.img [root@localhost ~]#mkdir /mnt/boot/1 //建立一个临时目录 [root@localhost ~]#cp /mnt/boot/initrd.img /mnt/boot/new/initrd.img [root@localhost ~]#cd /mnt/boot/1 [root@localhost 1]#gzip -dc initrd.img |cpio –idvm //解压initrd.img [root@localhost 1]#cp/lib/modules/2.6.23.1-4/kernel/drivers/scsi/ide-scsi.ko/mnt/boot/1/lib
修改/mnt/boot/1/init如下:
#!/bin/nash mount -t proc /proc /proc setquiet echo Mounting proc filesystem echo Mounting sysfs filesystem mount -t sysfs /sys /sys echo > /sys/power/suspend2/do_resume echo Creating /dev mount -o mode=0755 -t tmpfs /dev /dev mkdir /dev/pts mount -t devpts -o gid=5,mode=620 /dev/pts/dev/pts mkdir /dev/shm mkdir /dev/mapper echo Creating initial device nodes mknod /dev/null c 1 3 mknod /dev/zero c 1 5 mknod /dev/systty c 4 0 mknod /dev/tty c 5 0 mknod /dev/console c 5 1 mknod /dev/ptmx c 5 2 mknod /dev/rtc c 10 135 mknod /dev/tty0 c 4 0 mknod /dev/tty1 c 4 1 mknod /dev/tty2 c 4 2 mknod /dev/tty3 c 4 3 mknod /dev/tty4 c 4 4 mknod /dev/tty5 c 4 5 mknod /dev/tty6 c 4 6 mknod /dev/tty7 c 4 7 mknod /dev/tty8 c 4 8 mknod /dev/tty9 c 4 9 mknod /dev/tty10 c 4 10 mknod /dev/tty11 c 4 11 mknod /dev/tty12 c 4 12 mknod /dev/ttyS0 c 4 64 mknod /dev/ttyS1 c 4 65 mknod /dev/ttyS2 c 4 66 mknod /dev/ttyS3 c 4 67 echo Setting up hotplug. hotplug echo Creating block device nodes. mkblkdevs echo "Loading uhci-hcd.ko module" insmod /lib/uhci-hcd.ko echo "Loading ohci-hcd.ko module" insmod /lib/ohci-hcd.ko echo "Loading ehci-hcd.ko module" insmod /lib/ehci-hcd.ko mount -t usbfs /proc/bus/usb /proc/bus/usb echo "Loading jbd.ko module" insmod /lib/jbd.ko echo "Loading ext3.ko module" insmod /lib/ext3.ko echo "Loading BusLogic.ko module" insmod /lib/BusLogic.ko echo "Loading libata.ko module" insmod /lib/libata.ko echo "Loading ata_piix.ko module" insmod /lib/ata_piix.ko echo Waiting for driver initialization. stabilized --hash --interval 250/proc/scsi/scsi echo "Loading ide-core.ko module" insmod /lib/ide-core.ko echo "Loading ide-disk.ko module" insmod /lib/ide-disk.ko echo "Loading ide-scsi.ko module"//添加SCSI硬盘驱动模块,增加IDE设备对SCSI的模拟,否则无法挂载文件系统 insmod /lib/ide-scsi.ko mkblkdevs echo Creating root device. mkrootdev -t ext3 -o defaults,rw sda2 // 生成根目录设备 注意:一定要以rw(可读写)方式挂载,否则系统启动后无法修改和创建文件 echo Mounting root filesystem. mount /sysroot echo Setting up other filesystems. setuproot echo Switching to new root and runninginit. switchroot
修改完成后,下面生成新的initrd.img,先删除旧的initrd.img。
[root@localhost 1]#del initrd.img [root@localhost 1]# find ./ | cpio -c -o> initrd.img 26626 blocks [root@localhost 1]# gzip -9 initrd.img [root@localhost 1]# mv initrd.img.gzinitrd.img [root@localhost 1]#cp initrd.img /mnt/boot/initrd.img
9再次修改grub
[root@localhost ~]#cp /boot/message/mnt/boot/message //引导画面,可以去掉 [root@localhost ~]#cp /boot/grub/grub.conf/mnt/boot/grub/grub.conf
修改如下:
default=0 timeout=20 gfxmenu (hd0,0)/message title EmbeddedCE123 root(hd0,0) kernel/vmlinuz ro root=/dev/sda2 initrd/initrd.img
10构建文件系统
10.1命令移植
[root@localhost~]# cd /mnt/sysroot/ [root@localhostsysroot]# mkdir -pv root bin sbin usr/{bin,sbin} lib dev tmp proc sys home mnt media boot //创建文件系统的基本框架
复制基本的命令 init bash。
[root@localhost sysroot]#cp /bin/bash /bin/bash [root@localhostsysroot]#cp/sbin/init /sbin/init
查看命令所依赖的可文件:
[root@localhost sysroot]# ldd/bin/bash linux-gate.so.1 => (0xb7f2d000) libtermcap.so.2 =>/lib/libtermcap.so.2 (0xb7f12000) libdl.so.2 => /lib/libdl.so.2 (0xb7f0d000) libc.so.6 => /lib/libc.so.6(0xb7db6000) /lib/ld-linux.so.2 (0xb7f2e000)
在宿主机中找到这些文件并拷贝到相应的目录下。同理,移植init命令。最后,这两个命令所需的库文件如下:
libc-2.6.so libdl.so.2 libtermcap.so.2 ld-2.6.so libc.so.6 libselinux.so.1 libtermcap.so.2.0.8 ld-linux.so.2 libdl-2.6.so libsepol.so.1
10.2配置文件(/etc目录下的文件)
inittab文件的内容如下:
id:3:initdefault: si::sysinit:/etc/rc.d/rc.sysinit
fstab文件的内容如下:
/dev/sda2 / ext3 defaults 0 0 /dev/sda1 /boot ext3 defaults 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 var /dev tmpfs defaults 0 0
rc.d/rc.sysinit文件的内容如下:
#!/bin/bash echo -e " Welcome to EmbeddedCE123 Linux" /bin/bash
给rc.sysinit赋执行权限
[root@localhostsysroot]# chmod +x /etc/rc.d/rc.sysinit
11测试
新建一个虚拟机,选择linux2.6xx ,挂载上这块硬盘。效果如下图所示:
-
构建自己的Linux系统
2019-01-07 15:19:05最近在自制裁剪一套比较小的Linux系统,现在将流程记录下来,顺便分享一下 自制的Linux系统大小不到500M,相比原先的4.5G,结果还是比较满意,如果再去除掉一些驱动、命令还可以更小 在自制Linux 系统,我们需要...最近在自制裁剪一套比较小的Linux系统,现在将流程记录下来,顺便分享一下
自制的Linux系统大小不到500M,相比原先的4.5G,结果还是比较满意,如果再去除掉一些驱动、命令还可以更小
在自制Linux 系统,我们需要考虑的问题:
1.磁盘,分区
2.根文件系统
3.引导系统
4.内核
首先你得有一个可以运行的系统,不论是USB,虚拟机,还是真机;这里使用的Ubuntu 18.04.1
一、磁盘,分区
1.准备一块磁盘,安装在机器上,大小大于20G最好
2.进入Linux系统,初始化磁盘,进行分区,这里使用Gpt分区
1).获取新安装的磁盘
sudo fdisk -l | grep sd*
可以看到有一块没有初始化的硬盘,我这里是 /dev/sdb
2).初始化硬盘,我这里分6个区,我是为了兼容以前真机里面的一些设置,这里可以按自己的需求进行分区
sudo /dev/sdb 下面是fdisk工具的一些命令 g:使用gpt分区格式 n:新增一个分区 新增分区后,选择分区号,我这里默认 确定分区开始地址,默认即可 确定分区结束地址,例如 你需要分配20G空间给该分区,输入:+20G;前面的+号一定要有 分区出来的文件系统格式默认为ext4 t:修改分区文件格式 l:列出所有的文件系统格式 输入文件系统格式的编号 分配完所有分区以后记得保存 w:保存 Disk /dev/sdb: 111.8 GiB, 120034123776 bytes, 234441648 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 Disklabel type: gpt Disk identifier: 952A121F-25E2-C449-8ECF-6C40AC0623F4 Device Start End Sectors Size Type /dev/sdb1 2048 4095 2048 1M BIOS boot /dev/sdb2 4096 413695 409600 200M Linux filesystem /dev/sdb3 413696 84299775 83886080 40G Linux filesystem /dev/sdb4 84299776 178671615 94371840 45G Linux filesystem /dev/sdb5 178671616 182865919 4194304 2G Linux swap /dev/sdb6 182865920 234441610 51575691 24.6G Linux filesystem
3).格式化系统分区
格式化ext4分区 sudo mkfs.ext4 /dev/sdb2 sudo mkfs.ext4 /dev/sdb3 sudo mkfs.ext4 /dev/sdb4 sudo mkfs.ext4 /dev/sdb6 格式化swap分区 mkswap /dev/sdb2 查看UUID sudo blkid /dev/sdb1: PARTUUID="807358de-0814-2142-8cbf-8a1ddc60af59" /dev/sdb2: UUID="43005813-2ac9-4d97-8e45-d2b798e328fe" TYPE="ext4" PARTUUID="a9098552-1d2d-8b43-a860-06a09499903b" /dev/sdb3: UUID="0b3d6f52-4103-48be-b9fa-8fe500a0a0f5" TYPE="ext4" PARTUUID="43e1cb52-4029-1f47-883f-4abc8a9fb4d8" /dev/sdb4: UUID="94934fc3-5c51-4338-8339-80e539e20b50" TYPE="ext4" PARTUUID="319fd72c-c97a-f540-915a-267cb3649a7a" /dev/sdb5: UUID="26947552-a25c-49ff-9d22-5aac14365349" TYPE="swap" PARTUUID="68df19bb-2339-b241-8972-c05fb31fdd5c" /dev/sdb6: UUID="08a96d35-b7d1-4fd6-bc2d-32912fd6d02e" TYPE="ext4" PARTUUID="d3d05ab4-0165-144f-8e7f-4307988e3dbf"
二、准备根文件系统
1.自己制作根文件
1). 创建sysroot、boot目录
sudo mkdir -pv {/mnt/boot, /mnt/sysroot}
/mnt/boot 用来盛放Linux内核启动相关文件
/mnt/sysroot 用来盛放Linux跟文件系统
2).创建copycmd.sh 用来拷贝一些必要的命令
#!/bin/bash # read -p "please input a excute cmd(eg:cat|bash|quit):" command [ -a /mnt/sysroot ]||mkdir /mnt/sysroot &>/dev/null cpdir () { cmd=`which $command` if [ -f /mnt/sysroot$cmd ];then echo "the $cmd has been cp before" else local dir=`dirname $cmd` mkdir -p /mnt/sysroot$dir cp $cmd /mnt/sysroot$cmd echo "cp $cmd finished" fi } cplib () { cmd=`which $command` ldd $cmd |egrep -o "/lib64.* "|while read i;do if [ ! -f /mnt/sysroot$i ];then local dir=`dirname $i` mkdir -p /mnt/sysroot$dir cp $i /mnt/sysroot$i echo "cp $i finished" else echo "$i has been cp before" fi done ldd $cmd | awk -F ' ' '{print $1}'|while read i;do if [ ! -f /mnt/sysroot$i ];then local dir=`dirname $i` mkdir -p /mnt/sysroot$dir cp $i /mnt/sysroot$i echo "cp $i finished" else echo "$i has been cp before" fi done } type $command&>/dev/null||{ echo the command is not exsit;exit 100; } until [ $command == quit ];do type $command&>/dev/null||{ echo the command is not exsit;exit 100; } cpdir cplib read -p "please input new excute cmd(eg:cat|bash|quit):" command cmd=`which --skip-alias $command` done
拷贝命令如:bash,ls,cd,ifconfig,ping...
3).创建其它根下的文件夹,如:etc,dev 等
cd /mnt/sysroot mkdir {etc,dev,proc,sys,boot,home,var,root,mnt,tmp,lib}
这里只是创建根文件系统的模型
2.使用debootstrap工具,制作根文件系统
1).安装debootstrap
sudo apt-get install debootstrap
2).创建sysroot、boot目录
sudo mkdir -pv {/mnt/boot, /mnt/sysroot}
3).下载最小化ubuntu 系统,需要设定平台架构--arch=amd64,以及确定版本bionic(18.04)
debootstrap --arch=amd64 bionic /mnt/sysroot https://mirrors.ustc.edu.cn/ubuntu
3.为根文件系统安装基本软件
1).绑定资源
sudo mount -o bind /dev /media/ubuntu/dev sudo mount -o bind /dev/pts /media/ubuntu/dev/pts sudo mount -o bind /etc /media/ubuntu/etc sudo mount -o bind /proc /media/ubuntu/proc sudo mount -o bind /sys /media/ubuntu/sys
2).chroot进入最小化系统
sudo chroot /mnt/sysroot
3).sudo 安装与passwd
apt-get update apt-get install sudo passwd
4).安装网络工具,以及dhcp服务
apt-get install net-tools dhcpcd5
5).退出最小化系统环境,解绑系统资源
exit sudo umount -o bind /dev /media/ubuntu/dev sudo umount -o bind /dev/pts /media/ubuntu/dev/pts sudo umount -o bind /etc /media/ubuntu/etc sudo umount -o bind /proc /media/ubuntu/proc sudo umount -o bind /sys /media/ubuntu/sys
4.挂载磁盘,将文件系统写入磁盘
1).创建文件夹 /media/ubuntu
sudo mkdir -pv /media/ubuntu/boot
2).挂载磁盘
sudo mount /dev/sdb6 /media/ubuntu sudo mount /dev/sdb2 /media/ubuntu/boot
这里在上面分区时就决定以第6块分区sdb6(20G大小)做为/分区,第2块分区sdb2 200M为boot分区
3).安装grub引导
sudo grub-install --root-directory=/media/ubuntu /dev/sdb sudo update-grub
4).写入磁盘
sudo rsync -a /mnt/sysroot/* /media/ubuntu/ sudo rsync -a /boot/* /media/ubuntu/boot/ 同步boot时 也可以使用自己编译的内核,或者替换其他内核
这里主要是使用rsync命令 实时同步刚刚创建的跟文件系统,以及将当前系统boot文件夹给同步
5).修改fstab
sudo vim /etc/fstab 将分区UUID以及分区挂载的文件 写入 # UNCONFIGURED FSTAB FOR BASE SYSTEM UUID=08a96d35-b7d1-4fd6-bc2d-32912fd6d02e / ext4 errors=remount-ro 0 1 UUID=43005813-2ac9-4d97-8e45-d2b798e328fe /boot ext4 defaults 0 2 UUID=0b3d6f52-4103-48be-b9fa-8fe500a0a0f5 /data ext4 defaults 0 2 UUID=94934fc3-5c51-4338-8339-80e539e20b50 /database ext4 defaults 0 2 UUID=26947552-a25c-49ff-9d22-5aac14365349 none swap sw 0 1
6).修改grub配置文件/media/ubuntu/boot/grub/grub.cfg
因为当前文件的内是我们正在使用的这个系统的配置文件,系统的磁盘分区的UUID不一样,也有可能使用了不一样的内核;否则进不了系统
打开文件,
1).搜索search --no-floppy --fs-uuid --set ,这段代码后面跟了一串UUID指向了boot分区的UUID;将UUID替换为/media/ubuntu/boot挂载的分区的UUID;这里可以使用vim 全局替换
:%s/32669a74-c6cc-46ef-be17-7c822d0d698e/43005813-2ac9-4d97-8e45-d2b798e328fe/
32669a74-c6cc-46ef-be17-7c822d0d698e为当前使用的系统的boot分区的UUID
43005813-2ac9-4d97-8e45-d2b798e328fe为新的磁盘的boot分区的UUID
2).搜索linux /vmlinuz,这段代码后面跟了一串UUID指向了/分区的UUID;将UUID替换为/media/ubuntu/挂载的分区的UUID;这里可以使用vim 全局替换
:%s/a90160ab-b509-466a-be2c-9674877c8333/43005813-2ac9-4d97-8e45-d2b798e328fe/
a90160ab-b509-466a-be2c-9674877c8333 为当前使用的系统的/分区的UUID
08a96d35-b7d1-4fd6-bc2d-32912fd6d02e 为新的磁盘的/分区的UUID
3).系统内核镜像以及RAM disk映象
一个完整的grub启动菜单项
linux /vmlinuz-4.4.0-62-generic ...指的是内核镜像,这里可以修改为你需要使用内核镜像 后面跟是内核启动参数
initrd /initrd.img-4.4.0-62-generic 指的是RAM disk 临时根文件系统,这里面包含一些系统所需要的驱动模块menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-a90160ab-b509-466a-be2c-9674877c8333' { recordfail load_video gfxmode $linux_gfx_mode insmod gzio if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi insmod part_gpt insmod ext2 if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root 32669a74-c6cc-46ef-be17-7c822d0d698e else search --no-floppy --fs-uuid --set=root 32669a74-c6cc-46ef-be17-7c822d0d698e fi linux /vmlinuz-4.4.0-62-generic root=UUID=a90160ab-b509-466a-be2c-9674877c8333 ro net.ifnames=0 biosdevname=0 initrd /initrd.img-4.4.0-62-generic }
4).修改最小化系统的休眠后恢复系统休眠前的状态,就是修改内核脚本/scripts/local-premount/写的脚本 resume脚本的配置文件件/etc/initramfs-tools/conf.d/resume
RESUME=UUID=767d6d7f-74b8-4d48-854e-492fb0fc8dcd
这里UUID指向新的磁盘的swap分区的UUID,不要写错了,不然启动会有问题,可见我上一篇文章Llinux内核启动时卡在Scanning for Btrfs filesystems
到这里,就已经完了,这上面的每一步都非常重要 不能缺少;相较于制作跟文件系统两种方法,第一种与第二种的优缺点:
第一种自己制作根文件系统:
优点:占用空间小,可以最小化系统使用的服务,消耗资源少
缺点:后期需要配置很多很多东西,相对来说比较麻烦
第二种使用debootstrap:
优点:后期配置较少
缺点:相较第一种,占用空间、性能消耗等都要大一点
建议使用第二种,简单
最后重启,进入bios,最小化系统的磁盘作为启动盘启动;如果以上配置都正确,就可以成功启动该系统,如果不能启动,最多的问题就在grub上,好好看看自己的配置文件
-
构建自己的Linux 之二 BusyBox移植
2011-08-17 21:32:19构建自己的Linux 之二 BusyBox移植 BusyBox是一个集成了一百多个最常用linux命令和工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左右的大小.我们平时用的...构建自己的Linux 之二 BusyBox移植
配置BusyBox
[root@localhost Desktop]# tar jxvf busybox-1.13.0.tar.bz2 [root@localhost Desktop]# cd busybox-1.13.0 [root@localhost busybox-1.13.0]#make menuconfig [*] Build Busybox as a static binary (noshared libs) busyboxsettings->busybox library tuning->username completion、fancy shell prompts make menuconfig设置CROSS COMPILE为arm-linux- installoptin--> [*] Don't use /usr 防止编译后生成的文件安装到主机的/usr目录下,改变了主机的系统 make install即可在_install目录下生成bin sbin及其linuxrc文件(该文件链接到/bin/busybox)。
安装
将bin sbin及其linuxrc复制到文件系统中(直接覆盖,以前lib中的库文件不需要啦!)。
/etc目录下的配置文件
/etc/inittab的内容如下:
::sysinit:/etc/init.d/rcS ::respawn:-/bin/sh #tty1::askfirst:-/bin/sh ::ctrlaltdel:/bin/umount -a –r
/etc/fstab的内容如下:
/dev/sda2 / ext3 defaults 0 0 /dev/sda1 /boot ext3 defaults 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 var /dev tmpfs defaults 0 0
/etc/init.d的内容如下:
#! /bin/sh /bin/mount –a
测试
效果如下图所示:
-
构建自己的Linux系统记录(一)
2014-01-20 16:13:30对linux一直很向往,也用过ubuntu,但还是没有感受到linux的伟大,也许和自己是菜鸟有关,趁着寒假准备自己尝试编译linux系统,我准备照着手把手教你构建自己的Linux系统这本书试试。 这本书中主要分为了...对linux一直很向往,也用过ubuntu,但还是没有感受到linux的伟大,也许和自己是菜鸟有关,趁着寒假准备自己尝试编译linux系统,我准备照着手把手教你构建自己的Linux系统这本书试试。
这本书中主要分为了五个部分- 准备篇,对定制linux基础的说明,和一些准备工作
- 实践篇,利用虚拟机本地定制linux
- 提高篇,制作便携式的linux
- 进阶篇,交叉编译linux,
- 挑战篇,制作GNU/Hurd系统
交叉编译,在一种系统下产生另一个系统的可执行文件。Hurd,GNU开发的操作系统核心,读完了前两章,第一章只是一些介绍,linux历史,GNU和linux关系等,第二章是定制原理,很多地方没看明白,等我完成实践篇的时候,再回来读一遍吧。 -
构建自己的 Linux 发行版
2019-09-22 18:55:29如何用 SUSE Studio 构建 Linux 发行版? (1) 进入到www.susestudio.com,设立一个帐户 (2)为你的设备(发行版)选择一个基本模板 -软件和软件包选择 (1)选择设备将随带的软件和软件包 -配置 (1)在“个性化”... -
如何构建自己的 Linux 发行版
2008-12-01 18:53:00如何构建自己的 Linux 发行版求助于源代码以了解 Linux 基础和构建适当的 Linux级别: 初级Frank Pohlmann (frank@linuxuser.co.uk), 英国技术编辑2005 年 6 月 20 日Linux?From Scratch (LFS) 及其后代代表一种新... -
从头构建自己的Linux系统
2017-02-03 13:28:14在博文“Linux系统启动过程分析”中我们了解了linux系统的启动流程,今天我们就来手动一步一步从头来构建一个最小的linux系统,然后用模拟器将其加载起来。常见的模拟器有Qemu、Bochs、VMWare、VPC、Virtual Box和... -
"多快好省"——交叉编译构建自己的linux操作系统(2)
2019-05-10 18:56:22这里我们在《“多快好省”——交叉编译构建自己的linux操作系统》的基础上,使用busybox来构建initrd,在基于XFS文件系统的SATA硬盘上构建带有initrd的linux操作系统 设置编译环境 set +h umask 022 export LJOS=~/... -
Linux From Scratch 构建自己的 Linux
2017-08-08 09:57:46http://www.linuxfromscratch.org/ -
基于vmware7.1和LFS6.7构建自己的linux
2011-03-09 19:26:05基于vmware7.1和LFS6.7构建自己的linux 在几年前,我偶然接触到LFS,当时很感兴趣,于是参看网上的资料尝试编译了好几次,但刚开始就遇到一大堆的错误,让人很难继续走下去,最终都失败了,所以构建lfs的想法... -
构建自己的 LINUX 系统(一)
2016-09-16 11:24:46实验目标:基于 Tiny Core 构建一款迷你的 Linux 发行版系统。技能要点: 解构、重构 Linux 文件系统 解析、构建 Tiny Core 的文件系统和软件包 制作支持U盘引导的ISO镜像 使用虚拟机 QEMU 测试系统 SYSLinux 构建... -
如何从头开始构建自己的Linux Dotfiles Manager
2020-08-18 13:25:37As a new linux ???? user, you might realize that there are a bunch of configuration files present in your system... 作为新的Linux用户,您可能会意识到系统中存在大量配置文件。 这些特殊文件称为“点文件”... -
构建自己的 Linux 系统--原理
2018-04-14 21:16:31initrd和initramfs的区别https://blog.csdn.net/htttw/article/details/7217706Linux内核在初始化之后会执行init进程,而init进程会挂载我们的根...Linux2.6版以前的方法是:除了内核vmlinuz之外还有一个独立的in... -
从头构建自己的Linux系统 -转
2016-01-16 15:22:18在博文“Linux系统启动过程分析”中我们了解了linux系统的启动流程,今天我们就来手动一步一步从头来构建一个最小的linux系统,然后用模拟器将其加载起来。常见的模拟器有Qemu、Bochs、VMWare、VPC、Virtual Box和... -
LFS-构建自己的linux
2015-10-04 21:51:002019独角兽企业重金招聘Python工程师标准>>> ... -
构建自己的 LINUX 系统(四)
2016-10-11 09:26:21准备 TC 的 wifi 模块包及所需要的依赖库首先准备 wifi 模块和依赖库的安装包列表(你也可以自己去准备,不过我这里已经准备了一个了)cd mylinux/ mkdir extends/wifi_module wget -O extends/wifi -
构建自己的 LINUX 系统(三)
2016-09-29 10:45:30现在我们来简单定制一下 Tiny Core,或者说 MyLinux 的桌面环境,我们将用到 mksquashfs 工具。设置主题风格首先我们在 mylinux 目录下创建一个新目录 extends(如果你之前没有创建),然后从 mylinux/cde/optional...
-
WPF上位机数据采集与监控系统零基础实战
-
21年新接口自动化测试视频postman教程 零基础接口测试
-
Java学习路线,好的学习路线和好的方法,能让我们少走些弯路
-
215. 数组中的第K个最大元素 ( 基于快排的选择算法 )
-
FFmpeg4.3系列之26:视频监控之H265多路摄像头播控项目实战
-
Hive实战
-
CPP-Summit 2019 - 李永顺 - 嵌入式系统C++性能优化.pdf
-
matlab产生正弦波及.mif文件的程序-其它文档类资源
-
2020牛客暑期多校集训营第六场题解.pdf
-
考研-2009-2021年计算机408真题及答案 资料整理不易
-
易语言开发通达信DLL公式接口
-
第九章 Caché 变量大全 $KEY 变量
-
2020牛客多校暑期集训营第一场题解.pdf
-
Driver Signature Enforcement Overrider-桌面系统工具类资源
-
小论文数据求解.zip
-
2020牛客暑期多校集训营第五场题解.pdf
-
基于FPGA VHDL 的 ASK调制与解调设计(附源码)
-
Laya 2.0 开发3D小游戏 入门教学
-
JavaWeb知识系统结构总结.xmind
-
Java知识学习路线