To be a better coder
分类: LINUX
2020-04-29 17:35:21
一、下载内核源码,grub2源码,以及busybox源码:
找到需要的版本就好了,这里选择grub-1.99.tar.gz
找到需要的版本就好了,这里选择busybox-1.22.1.tar.bz2
https:// 找到需要的版本就好了,这里选择linux-2.6.36.tar.xz
二、编译源码
创建目录 /mylinux,将源码压缩包拷贝到/mylinux。
1、 编译grub2
解压:tar –xf grub-1.99.tar.gz
切换路径进行编译:cd grub-1.97
编译:./configure &&make&&make install
编译完成后,成生的执行文件在/usr/local/sbin目录下
2、 编译busybox
解压:tar –xf busybox-1.22.1.tar.bz2
切换路径进行编译:cd busybox-1.22.1
配置编译选项:make menuconfig
注:配置编译选项时,要将Don't use /usr 选上,要不然make install时,会将产生的执行文件拷贝到/usr相应目录下。其他的配置根据自己的需求决定
编译:make&& make install
注:编译产生的目标文件将输出到:_install目录下
3、 编译linux-2.6.36内核代码
解压: tar –xf linux-2.6.36.tar.xz
切换编译路径:cd linux-2.6.36
配置编译选项:
先拷贝当前系统的配置作为默认配置:cp /boot/config-xxx .config
再make menuconfig根据自己的需求修改内核配置
编译:make && make modules && make modules_install && make install
三、制作根文件系统目录
创建目录:mkdir –p /mylinux/sysroot
切换路径:cd /mylinux/sysroot
创建根目录:mkdir -p boot dev etc home linuxrc proc root tmp usr var lib
从系统中拷贝必要的设备文件:console kmem mem ram stderr stdout tty0 ttyS0 zero
fd/ loop null random stdin tty tty1 urandom
注:也可以自行用mknod命令创建
拷贝可执行文件:cp -Raf /mylinux/ busybox-1.22.1/_install/* /mylinux/sysroot/
拷贝内核模块:cp –Raf /lib/modules/linux-2.6.36xxx/* /mylinux/sysroot/lib/
编写系统配置文件:cd /mylinux/sysroot/etc
创建如下文件:busybox.conf fstab group init.d inittab issue motd mtab passwd profile resolv.conf shadow shadow-
创建目录:init.d
/dev/sda1 /boot ext3 defaults 0 0
/dev/sda2 / ext3 acl,user_xattr 1 1
proc /proc proc defaults 0 0
sysfs /sys sysfs noauto 0 0
debugfs /sys/kernel/debug debugfs noauto 0 0
usbfs /proc/bus/usb usbfs noauto 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
root:x:0:root
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
tty2::respawn:/bin/getty 38400 tty2
tty3::respawn:/bin/getty 38400 tty3
tty4::respawn:/bin/getty 38400 tty4
# Stuff to do when restarting the init process
::restart:/bin/init
# Stuff to do before rebooting
::ctrlaltdel:/bin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/bin/swapoff –a
My Linux release 0.1
root::0:0:root:/root:/bin/ash
# /etc/profile: system-wide .profile file for the Bourne shells
echo
echo
export PS1="[/u@/h /w]/$"
echo "Done"
alias ll='ls -l'
alias du='du -h'
alias df='df -h'
alias rm='rm -i'
echo
nameserver 202.96.209.5
nameserver 202.96.209.6
root:$1$$adltAB9Sr/MSKqylIvSJT/:12705:0:99999:7:::
root:$1$DWU.tenP$B7ANiXoGoiZMwJR6Ih8810:12705:0:99999:7:::
#! /bin/sh
mount -o remount,rw /
/bin/mount -a
>/etc/mtab
echo
echo -en "/t/tWelcom to //033[0;32mBabyLinux//033[0;39m/n"
echo
hostname My Linux
四,制作系统启动盘
注:暂时在虚拟机上进行操作,实际硬盘也是一个道理
1、 在虚拟机上增加一块硬盘,大小定为8G。
通过命令fdisk –l 可以看到新增加的硬盘:
尚未进行分区
2、 对新增硬盘用fdisk命令进行分区,分区如下:
3、 对新磁盘分区进行格式化:
mkfs.ext3 /dev/sdb1
mkfs.ext3 /dev/sdb2
4、 创建挂载目录:
mkdir –p /mnt/boot /mnt/sysroot
5、 挂载新磁盘
mount /dev/sdb1 /mnt/boot
mount /dev/sdb2 /mnt/sysroot/
6、 拷贝相应的文件到新磁盘中:
cp /boot/vmlinuz-2.6.36-12-xxx /mnt/boot/vmlinuz
cp /boot/initrd-2.6.36-12-xxx /mnt/boot/initrd
cp -Raf /mylinux/rootfs/* /mnt/sysroot/
7、 加入grub启动引导:
grub-install --root-directory=/mnt /dev/sdb
8、 创建grub启动菜单:
/mnt/boot/grub/grub.cfg:
set default=0
set timeout=5
menuentry "GNU/Linux, with Linux 3.16.3-12-default" {
set root=(hd0,1)
linux /vmlinuz
initrd / initrd
}
9、 卸载磁盘:
umount /mnt/boot
umount /mnt/sysroot
四、到这里系统就制作完成了,新系统已经写入磁盘,将新磁盘作为系统盘,即可引导系统.