linux kernel 5.19 +busybox +qt

1.下载内核:

git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/

apt-get install libdw-dev//安装必要的



配置menuconfig

    ----> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
Device Drivers  --->
    [*] Block devices  --->
			<*>   RAM block device support
			(65536) Default RAM disk size (kbytes)

编译

make O=out_x86_64 bzImage -j4

输出目录

byna@ubuntu:~/linux-5.19.5/out_x86_64$ ls
arch    drivers  io_uring  Makefile                 net       source      virt
block   fs       ipc       mm                       scripts   System.map  vmlinux
certs   include  kernel    modules.builtin          security  tools       vmlinux.o
crypto  init     lib       modules.builtin.modinfo  sound     usr         vmlinux.symvers

bzImage 位置

byna@ubuntu:~/linux-5.19.5/out_x86_64/arch/x86_64/boot$ ls
bzImage

byna@ubuntu:~/linux-5.19.5/out_x86_64/arch/x86_64/boot$ file bzImage 
bzImage: symbolic link to ../../x86/boot/bzImage

byna@ubuntu:~/linux-5.19.5/out_x86_64/arch/x86/boot$ file bzImage  //最终输出位置
bzImage: Linux kernel x86 boot executable bzImage, version 5.19.5 (root@ubuntu) #1 SMP PREEMPT_DYNAMIC Wed Aug 31 02:54:01 PDT 2022, RO-rootFS, swap_dev 0xA, Normal VGA

2,Busybox
a,下载Busybox
https://busybox.net/downloads/

配置busybox

 cd busybox-1.35.0/
sudo make menuconfig

做如下配置:

Busybox Settings  --->
[*] Build static binary (no shared libs) 

编译&&安装

#编译
sudo make -j4ls
 
#安装,执行则会在busybox源码目录下生成_install文件夹
sudo make install

3,制作文件系统
a,创建文件夹

sudo su //切换root
cp -r ./busybox-1.35.0/_install/ ./rootfs/

cd rootfs/

mkdir dev etc lib64 mnt opt proc root sys tmp var home //新建文件



root@ubuntu:/home/byna/rootfs# ls
bin  dev  etc  home  lib64  linuxrc  mnt  opt  proc  root  sbin  sys  tmp  usr  var

b,复制库文件

我们这里制作64bit的系统,把x86_64的库复制过来:

cp -r /lib/x86_64-linux-gnu/* ./rootfs/lib64/

,创建dev节点

sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2
sudo mknod rootfs/dev/tty3 c 4 3
sudo mknod rootfs/dev/tty4 c 4 4
sudo mknod rootfs/dev/console c 5 1
sudo mknod rootfs/dev/null c 1 3

d,配置etc

d1 配置rcS

mkdir ./rootfs/etc/init.d
vim ./rootfs/etc/init.d/rcS

添加如下内容,然后保存退出:

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
/bin/mount -a   #挂载fstab文件中所有指定的文件系统
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s                 #在/dev目录下建立必须的设备节点
/bin/hostname -F /etc/sysconfig/HOSTNAME

d2 配置inittab

vim ./rootfs/etc/inittab
::sysinit:/etc/init.d/rcS   #设置内核的热插拔,有mdev接收来自内核的消息并做出响应
::askfirst:-/bin/sh         #在串口启动一个登陆会话
::ctrlaltdel:/sbin/reboot   #作为init重启执行程序
::restart:/sbin/init
::showdown:/bin/mount       #告诉init在关机时运行umount命令卸载所有文件系统,如果卸载失败,以只读方式重新挂载

d3 配置fstab

vim ./rootfs/etc/fstab

添加如下内容(用tab隔开,不是空格),然后保存退出:

proc    /proc   proc    defaults    0   0
sysfs   /sys    sysfs   defaults    0   0
tmpfs   /tmp    tmpfs   defaults    0   0

d4 配置profile

vim ./rootfs/etc/profile

添加如下内容,然后保存退出:

#/etc/profile:system-wide .profile file for the Bourne shells
#!/bin/sh
#vim:syntax=sh
#No core file by defaults
#ulimit -S -c 0>/dev/null 2>&1
USER="id -un"
LOGNAME=$USER
PS1='[root@tshark]#'
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH

e,ramdisk

cd ./rootfs/
ln -sv bin/busybox init
find . | cpio -H newc -o | gzip -9 -n > ../ramdisk.gz

4,运行测试
a,安装qemu

sudo apt install qemu

b,编写运行脚本

vi run.sh
sudo qemu-system-x86_64 \
             -m 1024M \
             -kernel ./linux-5.19.5/out_x86_64/arch/x86_64/boot/bzImage \
             -nographic \
             -append "root=/dev/ram0 rw rootfstype=ext4 console=ttyS0 init=/linuxrc" \
             -initrd ./ramdisk.gz \
             -net nic,vlan=0 -net tap,vlan=0,ifname=tap0

修改权限

sudo chmod 775 ./run.sh
./run.sh

启动后出现:can’t run ‘/etc/init.d/rcS’: Permission denied

cd rootfs
chmod 777 etc/init.d/rcS

重新打包
在rootfs目录下

find . | cpio -H newc -o | gzip -9 -n > ../ramdisk.gz

(待续…)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值