-
生成Linux最小系统镜像
2017-12-19 08:55:38最近在用迅为的开发板座学习Linux移植,现在在做Linux最小系统生成,具体可以参考一下这篇博客: http://blog.csdn.net/qq_36788698/article/details/76604137最近在用迅为的开发板座学习Linux移植,现在在做Linux最小系统生成,具体可以参考一下这篇博客:
这个过程的话走一遍就行了。
我遇到的坑就是安装的是64位的Linux,但是给的编译器是32位。
需要安装32位的兼容软件
sudo apt-get install libc6-dev-i386
然后就是一个配置环境变量的问题
在当前用户下,使用
sudo vim .bashrc 命令将编译器的bin路径添加到最后一行
如果要全部用户都生效,就实现下面的命令,先切换到root 用户:
su root
相同的道理:
sudo vim .bashrc
最后输入 source .bashrc 使环境变量生效
http://blog.csdn.net/qq_36788698/article/details/76604137
-
Linux最小系统内核镜像文件的合成
2013-02-18 20:13:53 -
基于busybox构建最小linux Docker镜像系统
2017-04-18 17:30:041. Dockerfile 中可以通过FROM scratch引用一个docker内置的空镜像 2. Docker 容器的内核都是共享宿主操作系统的内核,容器启动后docker会自动在容器内建立系统目录:dev, etc, proc, run, sys 及系统文件 3. Docker...基本概念
1. Dockerfile 中可以通过FROM scratch引用一个docker内置的空镜像
2. Docker 容器的内核都是共享宿主操作系统的内核,容器启动后docker会自动在容器内建立系统目录:dev, etc, proc, run, sys 及系统文件
3. Docker 容器内是一个隔离的基于宿主系统内核的运行环境(或理解为 操作系统)。Docker 内的操作系统是以动态库、静态库、可执行程序及其他资源文件形态体现,如CentOS就是将CentOS的各种系统库、工具库及程序文件打包成Docker镜像。
4. 一个最小的能在Docker运行的程序可以通过静态编译实现,由于没有任何依赖(包括操作系统依赖,不含内核),可以直接在一个只包含该程序的Docker容器中启动起来;
而一个动态编译的程序,通常引用了系统库和其他第三方库。其中系统库主要有:ld-linux ,libdl, libm, libc, libm。这种情况下,就必须按照linux约定将系统库及第三方库放到镜像的 /lib或/lib64目录下(现代系统通常都用64位,64位库放到/lib64下,注意 /lib64是到/usr/lib64的软链接)。如果依赖库不全,docker 容器启动的时候会报错:standard_init_linux.go:175: exec user process caused "no such file or directory
因为要作一个最小的系统,又要实现一个linux系统的基本功能。因此选定busybox来实现这个系统。(busybox是静态编译,没有任何依赖,无需系统库及第三方库,且1.21.1版本的busybox只有951K)。
构建过程:
1. 创建linux系统的基础目录
mkdir minos cd minos mkdir usr mkdir usr/lib mkdir usr/local mkdir usr/lib64 mkdir usr/sbin mkdir usr/include mkdir usr/bin mkdir var/ mkdir var/lib mkdir var/run mkdir var/local mkdir var/log mkdir tmp
2. 创建 /lib /lib64软链接
3. 下载busybox并拷贝至 usr/bin目录ln -s usr/lib lib ln -s usr/lib64 lib64 ln -s usr/bin bin
curl -O https://busybox.net/downloads/binaries/1.21.1/busybox-x86_64 mv busybox-x86_64 usr/bin/busybox
4. 生成系统指令软链接chmod +x usr/bin/busybox ./usr/bin/busybox BusyBox v1.21.1 (2013-07-08 11:34:59 CDT) multi-call binary. BusyBox is copyrighted by many authors between 1998-2012. Licensed under GPLv2. See source distribution for detailed copyright notices. Usage: busybox [function [arguments]...] or: busybox --list[-full] or: busybox --install [-s] [DIR] or: function [arguments]... BusyBox is a multi-call binary that combines many common Unix utilities into a single executable. Most people will create a link to busybox for each function they wish to use and BusyBox will act like whatever it was invoked as. Currently defined functions: [, [[, acpid, add-shell, addgroup, adduser, adjtimex, arp, arping, ash, awk, base64, basename, beep, blkid, blockdev, bootchartd, brctl, bunzip2, bzcat, bzip2, cal, cat, catv, chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt, cksum, clear, cmp, comm, conspy, cp, cpio, crond, crontab, cryptpw, cttyhack, cut, date, dc, dd, deallocvt, delgroup, deluser, depmod, devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, du, dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid, ether-wake, expand, expr, fakeidentd, false, fbset, fbsplash, fdflush, fdformat, fdisk, fgconsole, fgrep, find, findfs, flock, fold, free, freeramdisk, fsck, fsck.minix, fsync, ftpd, ftpget, ftpput, fuser, getopt, getty, grep, groups, gunzip, gzip, halt, hd, hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id, ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd, init, insmod, install, ionice, iostat, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd, last, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname, logread, losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lsof, lspci, lsusb, lzcat, lzma, lzop, lzopcat, makedevs, makemime, man, md5sum, mdev, mesg, microcom, mkdir, mkdosfs, mke2fs, mkfifo, mkfs.ext2, mkfs.minix, mkfs.vfat, mknod, mkpasswd, mkswap, mktemp, modinfo, modprobe, more, mount, mountpoint, mpstat, mt, mv, nameif, nanddump, nandwrite, nbd-client, nc, netstat, nice, nmeter, nohup, nslookup, ntpd, od, openvt, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress, pivot_root, pkill, pmap, popmaildir, poweroff, powertop, printenv, printf, ps, pscan, pstree, pwd, pwdx, raidautorun, rdate, rdev, readahead, readlink, readprofile, realpath, reboot, reformime, remove-shell, renice, reset, resize, rev, rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake, run-parts, runlevel, runsv, runsvdir, rx, script, scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont, setkeycodes, setlogcons, setserial, setsid, setuidgid, sh, sha1sum, sha256sum, sha3sum, sha512sum, showkey, slattach, sleep, smemcap, softlimit, sort, split, start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd, swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd, time, timeout, top, touch, tr, traceroute, traceroute6, true, tty, ttysize, tunctl, udhcpc, udhcpd, udpsvd, umount, uname, unexpand, uniq, unix2dos, unlzma, unlzop, unxz, unzip, uptime, users, usleep, uudecode, uuencode, vconfig, vi, vlock, volname, wall, watch, watchdog, wc, wget, which, who, whoami, whois, xargs, xz, xzcat, yes, zcat, zcip
利用http://tool.oschina.net/regex/ 提供的在线正则,正则表达式: \s*([^,]+),?\s*, 替换文本:ln -s busybox $1; 最终得到指令如下cd usr/bin; ln -s busybox [;ln -s busybox [[;ln -s busybox acpid;ln -s busybox add-shell;ln -s busybox addgroup;ln -s busybox adduser;ln -s busybox adjtimex;ln -s busybox arp;ln -s busybox arping;ln -s busybox ash;ln -s busybox awk;ln -s busybox base64;ln -s busybox basename;ln -s busybox beep;ln -s busybox blkid;ln -s busybox blockdev;ln -s busybox bootchartd;ln -s busybox brctl;ln -s busybox bunzip2;ln -s busybox bzcat;ln -s busybox bzip2;ln -s busybox cal;ln -s busybox cat;ln -s busybox catv;ln -s busybox chat;ln -s busybox chattr;ln -s busybox chgrp;ln -s busybox chmod;ln -s busybox chown;ln -s busybox chpasswd;ln -s busybox chpst;ln -s busybox chroot;ln -s busybox chrt;ln -s busybox chvt;ln -s busybox cksum;ln -s busybox clear;ln -s busybox cmp;ln -s busybox comm;ln -s busybox conspy;ln -s busybox cp;ln -s busybox cpio;ln -s busybox crond;ln -s busybox crontab;ln -s busybox cryptpw;ln -s busybox cttyhack;ln -s busybox cut;ln -s busybox date;ln -s busybox dc;ln -s busybox dd;ln -s busybox deallocvt;ln -s busybox delgroup;ln -s busybox deluser;ln -s busybox depmod;ln -s busybox devmem;ln -s busybox df;ln -s busybox dhcprelay;ln -s busybox diff;ln -s busybox dirname;ln -s busybox dmesg;ln -s busybox dnsd;ln -s busybox dnsdomainname;ln -s busybox dos2unix;ln -s busybox du;ln -s busybox dumpkmap;ln -s busybox dumpleases;ln -s busybox echo;ln -s busybox ed;ln -s busybox egrep;ln -s busybox eject;ln -s busybox env;ln -s busybox envdir;ln -s busybox envuidgid;ln -s busybox ether-wake;ln -s busybox expand;ln -s busybox expr;ln -s busybox fakeidentd;ln -s busybox false;ln -s busybox fbset;ln -s busybox fbsplash;ln -s busybox fdflush;ln -s busybox fdformat;ln -s busybox fdisk;ln -s busybox fgconsole;ln -s busybox fgrep;ln -s busybox find;ln -s busybox findfs;ln -s busybox flock;ln -s busybox fold;ln -s busybox free;ln -s busybox freeramdisk;ln -s busybox fsck;ln -s busybox fsck.minix;ln -s busybox fsync;ln -s busybox ftpd;ln -s busybox ftpget;ln -s busybox ftpput;ln -s busybox fuser;ln -s busybox getopt;ln -s busybox getty;ln -s busybox grep;ln -s busybox groups;ln -s busybox gunzip;ln -s busybox gzip;ln -s busybox halt;ln -s busybox hd;ln -s busybox hdparm;ln -s busybox head;ln -s busybox hexdump;ln -s busybox hostid;ln -s busybox hostname;ln -s busybox httpd;ln -s busybox hush;ln -s busybox hwclock;ln -s busybox id;ln -s busybox ifconfig;ln -s busybox ifdown;ln -s busybox ifenslave;ln -s busybox ifplugd;ln -s busybox ifup;ln -s busybox inetd;ln -s busybox init;ln -s busybox insmod;ln -s busybox install;ln -s busybox ionice;ln -s busybox iostat;ln -s busybox ip;ln -s busybox ipaddr;ln -s busybox ipcalc;ln -s busybox ipcrm;ln -s busybox ipcs;ln -s busybox iplink;ln -s busybox iproute;ln -s busybox iprule;ln -s busybox iptunnel;ln -s busybox kbd_mode;ln -s busybox kill;ln -s busybox killall;ln -s busybox killall5;ln -s busybox klogd;ln -s busybox last;ln -s busybox less;ln -s busybox linux32;ln -s busybox linux64;ln -s busybox linuxrc;ln -s busybox ln;ln -s busybox loadfont;ln -s busybox loadkmap;ln -s busybox logger;ln -s busybox login;ln -s busybox logname;ln -s busybox logread;ln -s busybox losetup;ln -s busybox lpd;ln -s busybox lpq;ln -s busybox lpr;ln -s busybox ls;ln -s busybox lsattr;ln -s busybox lsmod;ln -s busybox lsof;ln -s busybox lspci;ln -s busybox lsusb;ln -s busybox lzcat;ln -s busybox lzma;ln -s busybox lzop;ln -s busybox lzopcat;ln -s busybox makedevs;ln -s busybox makemime;ln -s busybox man;ln -s busybox md5sum;ln -s busybox mdev;ln -s busybox mesg;ln -s busybox microcom;ln -s busybox mkdir;ln -s busybox mkdosfs;ln -s busybox mke2fs;ln -s busybox mkfifo;ln -s busybox mkfs.ext2;ln -s busybox mkfs.minix;ln -s busybox mkfs.vfat;ln -s busybox mknod;ln -s busybox mkpasswd;ln -s busybox mkswap;ln -s busybox mktemp;ln -s busybox modinfo;ln -s busybox modprobe;ln -s busybox more;ln -s busybox mount;ln -s busybox mountpoint;ln -s busybox mpstat;ln -s busybox mt;ln -s busybox mv;ln -s busybox nameif;ln -s busybox nanddump;ln -s busybox nandwrite;ln -s busybox nbd-client;ln -s busybox nc;ln -s busybox netstat;ln -s busybox nice;ln -s busybox nmeter;ln -s busybox nohup;ln -s busybox nslookup;ln -s busybox ntpd;ln -s busybox od;ln -s busybox openvt;ln -s busybox passwd;ln -s busybox patch;ln -s busybox pgrep;ln -s busybox pidof;ln -s busybox ping;ln -s busybox ping6;ln -s busybox pipe_progress;ln -s busybox pivot_root;ln -s busybox pkill;ln -s busybox pmap;ln -s busybox popmaildir;ln -s busybox poweroff;ln -s busybox powertop;ln -s busybox printenv;ln -s busybox printf;ln -s busybox ps;ln -s busybox pscan;ln -s busybox pstree;ln -s busybox pwd;ln -s busybox pwdx;ln -s busybox raidautorun;ln -s busybox rdate;ln -s busybox rdev;ln -s busybox readahead;ln -s busybox readlink;ln -s busybox readprofile;ln -s busybox realpath;ln -s busybox reboot;ln -s busybox reformime;ln -s busybox remove-shell;ln -s busybox renice;ln -s busybox reset;ln -s busybox resize;ln -s busybox rev;ln -s busybox rm;ln -s busybox rmdir;ln -s busybox rmmod;ln -s busybox route;ln -s busybox rpm;ln -s busybox rpm2cpio;ln -s busybox rtcwake;ln -s busybox run-parts;ln -s busybox runlevel;ln -s busybox runsv;ln -s busybox runsvdir;ln -s busybox rx;ln -s busybox script;ln -s busybox scriptreplay;ln -s busybox sed;ln -s busybox sendmail;ln -s busybox seq;ln -s busybox setarch;ln -s busybox setconsole;ln -s busybox setfont;ln -s busybox setkeycodes;ln -s busybox setlogcons;ln -s busybox setserial;ln -s busybox setsid;ln -s busybox setuidgid;ln -s busybox sh;ln -s busybox sha1sum;ln -s busybox sha256sum;ln -s busybox sha3sum;ln -s busybox sha512sum;ln -s busybox showkey;ln -s busybox slattach;ln -s busybox sleep;ln -s busybox smemcap;ln -s busybox softlimit;ln -s busybox sort;ln -s busybox split;ln -s busybox start-stop-daemon;ln -s busybox stat;ln -s busybox strings;ln -s busybox stty;ln -s busybox su;ln -s busybox sulogin;ln -s busybox sum;ln -s busybox sv;ln -s busybox svlogd;ln -s busybox swapoff;ln -s busybox swapon;ln -s busybox switch_root;ln -s busybox sync;ln -s busybox sysctl;ln -s busybox syslogd;ln -s busybox tac;ln -s busybox tail;ln -s busybox tar;ln -s busybox tcpsvd;ln -s busybox tee;ln -s busybox telnet;ln -s busybox telnetd;ln -s busybox test;ln -s busybox tftp;ln -s busybox tftpd;ln -s busybox time;ln -s busybox timeout;ln -s busybox top;ln -s busybox touch;ln -s busybox tr;ln -s busybox traceroute;ln -s busybox traceroute6;ln -s busybox true;ln -s busybox tty;ln -s busybox ttysize;ln -s busybox tunctl;ln -s busybox udhcpc;ln -s busybox udhcpd;ln -s busybox udpsvd;ln -s busybox umount;ln -s busybox uname;ln -s busybox unexpand;ln -s busybox uniq;ln -s busybox unix2dos;ln -s busybox unlzma;ln -s busybox unlzop;ln -s busybox unxz;ln -s busybox unzip;ln -s busybox uptime;ln -s busybox users;ln -s busybox usleep;ln -s busybox uudecode;ln -s busybox uuencode;ln -s busybox vconfig;ln -s busybox vi;ln -s busybox vlock;ln -s busybox volname;ln -s busybox wall;ln -s busybox watch;ln -s busybox watchdog;ln -s busybox wc;ln -s busybox wget;ln -s busybox which;ln -s busybox who;ln -s busybox whoami;ln -s busybox whois;ln -s busybox xargs;ln -s busybox xz;ln -s busybox xzcat;ln -s busybox yes;ln -s busybox zcat;ln -s busybox zcip ; cd -;
执行指令,建立软链接5. 编辑Dockerfile
FROM scratch MAINTAINER YeQiang ADD ./ / RUN rm /Dockerfile
6. 制作镜像docker build -t minos .
7. 查看镜像
[yeqiang@localhost minos]$ docker images | grep minos minos latest c43240f48fba 25 hours ago 973.4 kB
8. 测试镜像[yeqiang@localhost minos]$ docker run --rm -it minos /bin/sh / # ls -l total 20 lrwxrwxrwx 1 0 0 7 Apr 18 02:40 bin -> usr/bin drwxr-xr-x 5 0 0 380 Apr 18 09:28 dev drwxr-xr-x 2 0 0 4096 Apr 18 09:28 etc lrwxrwxrwx 1 0 0 7 Apr 18 06:20 lib -> usr/lib lrwxrwxrwx 1 0 0 9 Apr 18 02:40 lib64 -> usr/lib64 dr-xr-xr-x 288 0 0 0 Apr 18 09:28 proc drwxr-xr-x 3 0 0 4096 Apr 18 06:22 run dr-xr-xr-x 13 0 0 0 Apr 18 00:32 sys drwxrwxr-x 2 0 0 4096 Apr 18 06:18 tmp drwxr-xr-x 8 0 0 4096 Apr 18 06:22 usr drwxrwxr-x 6 0 0 4096 Apr 18 06:22 var / #
-
编译Linux内核并运行一个最小镜像
2017-12-26 18:13:07需求公司的专用服务器使用自定义Linux内核,运行一个由busybox构成的最小镜像. 由于某些原因, 使用的内核来自其他人已经编译好的,并且也拿不到配置文件。 现在需要: 1. 添加某个专用驱动到内核中,并且添加一些...需求
公司的专用服务器使用自定义Linux内核,运行一个由busybox构成的最小镜像. 由于某些原因, 使用的内核来自其他人已经编译好的,并且也拿不到配置文件。 现在需要:
1. 添加某个专用驱动到内核中,并且添加一些脚本到新的系统运行镜像包initrd中
2. 兼容以前的系统镜像,不能出现使用旧的内核搭配新镜像时无法启动的问题本文把用到的知识点记录下来,便于有相同需求的同学参考。
系统内核称为bzImage或kernel , 系统镜像称为 initrd包含知识点
- Linux启动过程之initrd
- BootLoader 之 extLinux
- 编译Linux内核的方法
- 内核编译时如何选择系统自带的驱动
- 如何将私有驱动编译到内核中
- 启动内核时,出现 kernel Panic - not syncing 的解决办法
- 开机后键盘无法使用的问题解决
- 使用busybox制作initrd
本文中只叙述某些关键点,具体细节可以参考每一节中给出的链接
1. Linux启动过程之initrd
- 机器启动时,首先是 BIOS 运行 ,在磁盘的MBR中,找到BootLoader。
- BootLoader运行, BootLoader配置文件会指出系统启动的某些参数, 比如在哪里找到 kernel , 在哪里找到 initrd。
- 然后开始加载 kernel , 之后加载initrd 进入到 early user space状态。 initrd 有两种技术,旧的一种使用镜像文件,叫做 init ram disk , 新的一种使用ramfs归档文件,叫做 init ram filesystem ,可能是由于历史原因,ubuntu的系统镜像虽然是新的技术,但文件名仍然看起来像是旧的 intrd*.
- initrd启动后,如果是旧的技术ram disk,运行的第一个程序是镜像中的 /linuxrc 脚本 , 如果是新的ram filesytem 运行的第一个程序是 /init脚本 , 一般会在脚本的最后使用 switch_root命令切换根目录到实际的磁盘根目录中。
由于我司服务器的特殊性, 只是把磁盘挂载为 /data 目录用来存储数据, 系统仍运行在 initrd 环境下,所以没有最后这一步。
关于两种技术的区别, 请参考内核源码目录下 Documentation/initrd.txt 和 IBM: Linux2.6 内核的 Initrd 机制解析
要制作支持initrd的内核 参考这个链接 CSDN:移植linux 内核支持ramdisk
2. BootLoader 之 extLinux
extLinux是一种启动引导,优点是支持多种启动介质,配置简单。
一般用法是
mkdir -p /boot/extlinux extlinux --install /boot/extlinux cat mbr.bin > /dev/XXX ##mbr.bin 在extlinux的安装目录下,如果是系统自带的的则可能在 /usr/lib/EXTLINUX/ 下, 如果没有,请自行搜索文件位置
配置文件在安装目录的 extlinux/extlinux.conf
配置文件中的参数会传给内核 ,通过指定特定的的参数, 可以用来调试内核问题。 系统启动后可以在 /proc/cmdline 中查看
/root # cat /proc/cmdline vga=0x305 loglevel=3 initrd=/rootfs BOOT_IMAGE=/bzImage
3. 编译Linux内核的方法
上面的链接说明了如何编译一个内核
一般系统的步骤为:
make menuconfig #该步骤可能会提示缺少 ncurses , apt install libncurses5-dev 即可 #配置好选项, 关于如何配置,参考下一节 make -j4 #开始编译,指定4个线程编译,根据配置的不同,这里可能花费几个小时 make modules_install #安装模块 make install #安装kernel,initrd 并自动更新引导 内核名称为vmlinuz*
由于公司的服务器使用busybox最小镜像,只需要编译内核,不需要生成initrd(后面第8节说明如何使用busybox生成initrd), 编译步骤为:
make menuconfig make -j4 make bzImage
将 bzImage 拷贝到服务器,然后在 extlinux.conf 中指定为 kernel选项的值即可。 或者 extlinux.conf 中kernel的值为一个符号链接, 这样只需要修改符号链接即可
4. 内核编译时如何选择系统自带的驱动
公司服务器硬件比较特殊, 如果直接使用默认的配置生成bzImage,开机后提示没有硬盘,同时键盘也无法使用,无法进入系统调试。
通用的内核选项可以参考这个链接
简书:Linux内核编译与管理如果编译的内核启动后提示找不到硬盘或者其他驱动问题,可参考这个链接:
CSDN:制作最小linux内核如果要去除所有不必要的驱动和功能, 只保留必要的功能,也可参考上面的链接
CSDN:制作最小linux内核 , 该文章主要用到命令 lspci -v , lsmod , modinfo键盘驱动问题在第7节中专门解决。
5.如何将私有驱动编译到内核中
在 linux 内核中增加程序需要完成以下三项工作:
1. 将编写的源代码复制到 Linux 内核源代码的相应目录
2. 在目录的 Kconfig 文件中增加新源代码对应项目的编译配置选项
3. 在目录的 Makefile 文件中增加对新源代码的编译条目参考这个链接
CSDN:Linux内核开发之将驱动程序添加到内核6. 启动内核时,出现 kernel Panic的解决办法
旧式 init ram disk initrd的块大小必须和内核编译时的值匹配才能启动
如果你仔细阅读了第1节,应该不会出现这个 kernel panic。然而, 由于公司的服务器内核配置的块大小未知,并且新编译的内核要和以前的兼容,所以必须知道原来的块大小是多少. 大致流程为:
1. 生成一个512k块大小的系统 , 并把原来的镜像文件拷贝到该镜像中
2. 使用该镜像作为initrd启动
3. 检查内核的出错信息并根据该信息修改块大小bash# dd if=/dev/zero of=../initrd.img bs=512k count=100 bash# mkfs.ext2 -F -m0 ../initrd.img bash# mount -t ext2 -o loop ../initrd.img /mnt bash# cp -r * /mnt #拷贝需要的文件到镜像 bash# umount /mnt bash# gzip -9 ../initrd.img
修改initrd为上面生成的压缩文件, 重新启动系统,出现 kernel panic
Kernel panic - not syncing :VFS: Unable to mount root fs on unknown-block(2,0)
Kernel Offset:0x0 from 0xffffffff81000000 (relocation randge :0xffffffff80000000-0x0xffffffff9fffffff)0xffffffff81000000 和 0xffffffff80000000 相差16M, 1677721字节.
在extlinux.conf 文件中添加配置APPEND ramdisk_size=16777216
重新启动成功。 因此块大小应该为 16M .
删掉
APPEND ramdisk_size=16777216
根据第1节的方法, 修改内核配置参数#make menuconfig
打开配置菜单,修改两个配置项,分别是:
- General setup–>选择 Initial RAM filesystem and RAM disk…… 项
- Device Drivers–>Block devices–>选择 RAM block device support 项
- device driver->block device里的一个选项,Default Ramdisk 设置ramdisk的大小16777216保存退出, 重新编译即可
7.开机后键盘无法使用的问题解决
可能是主板的原因, 编译的内核启动后无法识别键盘, 再bootLoader能使用的键盘,在开机后反而无法使用.
键盘驱动问题,请参考这个链接
linux-usb
该链接说明了 鼠标/键盘/手柄的驱动配置方法8. 使用busybox制作initrd
步骤
1. 下载 busybox 并解压
2. 进入目录 make menuconfig ,并配置 Busybox Settings —> Build Options —> Build BusyBox as a static binary (no shared libs) —> yes
3. make
4. make install
5. 需要的系统文件在 busyboxdir/_install/ 下 ,拷贝所有文件到镜像的挂载目录 , 如果使用 init ram disk , 修改 /linuxrc 脚本 为如下内容#! /bin/sh mount -n -t proc proc /proc # # disable console login grep -q console=null /proc/cmdline && sed -i s/^tty/#tty/ /etc/inittab # # this is a traditional mechanism for initrd # notify kernel remount /dev/ram0 as root echo 0x0100 > /proc/sys/kernel/real-root-dev umount -n /proc
卸载镜像, 压缩镜像, 请参考第一节
如果使用 ram filesystem , 删除 /linuxrc 添加 /init
#!/bin/sh #init mount -t proc none /proc mount -t sysfs none /sys exec /bin/sh
打包所有文件为 cpio文件并压缩
find . | cpio --quiet -H newc -o | gzip -9 -n > /boot/initrd.img
-
Alpine Linux 操作系统 Docker 构建最小镜像
2020-12-30 17:19:38Alpine 操作系统是一个面向安全的轻型 Linux 发行版。它不同于通常 Linux 发行版,Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,因此得到开源社区越来越... -
Linux_树莓派_最小镜像_无损压缩
2020-07-05 20:10:29TF卡有16G,直接备份出来的img文件就有16G那么大,但是实际装在TF卡中的有用数据却只有几G,再写入就需要32g的卡,这样做出来的img文件就太浪费空间了,因此使用这个方法压缩磁盘,制作小img镜像。 参考教程 ... -
在linux上制作树莓派最小img镜像
2018-06-03 01:30:37于是想要固化移植成果,需要给移植好的TF卡制作一个img备份镜像,其实最简单的方法就是直接使用dd命令将整个TF卡dd到一个xxx.img文件即可。 但是这样生成的img文件是整个TF卡的大小,我使用的TF卡有16G,因而直接... -
最小linux系统alpine做基础容器镜像管理
2020-09-22 21:57:40alpine简称高山的 是一款非常适合做k8s基础镜像的linux 1、小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB; 2、安全:面向安全的轻量发行版; 3、简单:提供APK包管理工具,软件的... -
i.MX6ULL终结者Linux文件系统开发制作最小文件系统镜像
2021-01-25 13:22:28文章目录1 BusyBox工具简介2 Busybox 制作最小文件系统2.1 准备源码2.2 编译环境2.3 支持中文2.4 配置Busybox2.5 编译Busybox2.6 整理最小文件...iMX6U不仅可以跑QtE系统,还可以运行简单的Linux最小文件系统“麻雀虽 -
alpine-node:在Alpine Linux上构建的最小Node.js Docker镜像-源码
2021-02-02 06:16:23alpine-node:在Alpine Linux上构建的最小Node.js Docker镜像 -
alpine linux下pyinstaller的使用和docker镜像最小化
2018-11-16 00:16:01基于linux的镜像,如ubuntu等,普遍有超过100M的大小,安装python环境后能超过300M。由此带来的存储和网络传输负担甚至超过了docker跨平台带来的好处。 但幸运的是,一个特殊的linux镜像——alpi... -
docker构建JDK最小镜像
2019-12-14 12:15:15一、构建最小JDK 1、解压jre 1 2 # tar -zxvfjre-8u181-linux-x64.tar.gz 2、删除无用文件 1 2 3 4 5 6 7 8 9 10 11 12 13 ... -
mysql5.7 linux最小化_在最小化的linux上安装mysql
2021-01-19 00:18:38最小化的linux,比如: centos mini镜像。该系统上只有最基本的命令。从mysql官网下载5.7的bundle打包好的tar文件。使用tar解压:tar -xvf mysql-bundle.tar会生成好几个rpm文件。安装哪个都会提示一些依赖错误或报错... -
【北京迅为】i.MX6ULL终结者Linux文件系统开发制作最小文件系统镜像
2021-01-25 10:43:26文章目录1 BusyBox工具简介2 Busybox 制作最小文件系统2.1 准备源码2.2 编译环境2.3 支持中文2.4 配置Busybox2.5 编译Busybox2.6 整理最小文件...iMX6U不仅可以跑QtE系统,还可以运行简单的Linux最小文件系统“麻雀虽 -
Linux最小化安装
2017-10-19 16:06:08一、介绍我用的平台是网上下载的...接下来是镜像文件,主要有Ubuntu和centos。一般来说服务器多用centos,就是黑屏加命令的那种。而Ubuntu界面做的很好,但是服务器一般都不会有界面的,装了图形界面可能还会破坏稳 -
openstack 制作linux镜像+centos官方镜像使用教程
2019-02-18 14:42:36openstack 制作linux镜像+centos官方镜像使用教程 工具:VMware Workstation (虚拟机)、CentOS-7-x86_64-Minimal-1511.iso(Minimal是官方最小的centos镜像文件,也可以使用其他镜像正常大小的iso文件)。 1.创建一... -
Linux最小根文件系统
2017-08-19 11:30:40和C盘一样在某个分区中存放系统启动必须的文件,如内核镜像文件(一般单独存放在一个分区中),内核启动后运行的第一个程序init、给用户提供界面的shell程序、应用程序依赖的库。这些必需、基本的文件合称根文件系统... -
Linux——Linux系统编程之搭建最小Linux系统
2020-11-27 17:45:332 完善最小系统文件 2.1 创建关键的文件夹 2.2 补充文件夹中的文件 3 安装打包软件编译 4 烧写镜像文件 0 引言 当前阶段的目标是搞定嵌入式Linux,首先要从Linux系统编程入手,熟悉Linux的编程思想及相关API的...