求教:如何在本机为别的电脑制作一个linux系统?
目前有两台电脑,一台是工作电脑,装有ubuntu18.04,做开发用,姑且叫它上位机。另外一台是Z8300的一体机,姑且叫它下位机。
现在的计划是在上位机上制作一个4.17内核的linux系统,使用u盘做下位机硬盘,给下位机使用。
目前已经在u盘上制做好了uefi启动分区,建立一个ext4分区,
把centos7安装镜像里面的boot,vmlinux,initrd.img放到u盘启动分区,
解压centos7安装镜像里面的squashfs.img,得到ext4的根目录系统镜像,输出到u盘ext4分区
更改grub.cfg文件,指定kernel,initrd,root,能够启动进入系统,尽管有很多错误。。。
但是用4.17内核制作系统就没有思路了,
请教一下各位高手,make了4.17kernel以后,怎么在上位机给下位机制作对应的initrd,怎么make内核对应的lib和mould,怎么make 对应lib的执行文件。 据我所知,kernel就是个文件,直接替换了。。 wye11083 发表于 2018-8-24 10:57
据我所知,kernel就是个文件,直接替换了。。
驱动和lib是依赖kernel的,执行文件依赖lib,单纯换kernel文件,驱动出错,直接panic
虚拟机,随便拷,还能打快照。 aozima 发表于 2018-8-24 11:22
虚拟机,随便拷,还能打快照。
不是搞虚拟机,是我有个z8300的本,想搞个linux系统给它用,不想装发行版本。话说在z8300上编译内核真心慢。 虚拟机,挂载U盘,做好系统设置好之后再插另一台电脑上。 Doding 发表于 2018-9-2 18:14
虚拟机,挂载U盘,做好系统设置好之后再插另一台电脑上。
虚拟机也要kernel,也要initrd,也要rootfs吧,这些怎么制作出来? hl1200 发表于 2018-9-2 18:42
虚拟机也要kernel,也要initrd,也要rootfs吧,这些怎么制作出来?
虚拟机加载安装光盘镜像,直接安装,不就行了吗?换成电脑引导,有可能会出不少错。 Doding 发表于 2018-9-2 19:49
虚拟机加载安装光盘镜像,直接安装,不就行了吗?换成电脑引导,有可能会出不少错。 ...
发行版本太多东西了,不想安装。只想编译基础系统加自己的程序。 本帖最后由 dr2001 于 2018-9-2 20:38 编辑
简单的方案是使用Gentoo,Arch等以命令行为主的发行版,体积不大且功能全面,还有足够的Wiki文档。
初期可以只安装基础版本,以后安装别的软件也很方便,包括安装GUI。
其次是看看某些微型Linux的发行版,或者路由器的发行版,etc。
微型Linux的发行版印象中有64MB以内的,当然,这个就只能起个BusyBox,默认干不了太多事儿。
自己编译的话,搜索LFS(Linux From Scratch),完全从头自己编译并且构建initramfs/rootfs。
当然,这个做出来的是针对特定平台的;这个的研究对嵌入式环境的Linux定制很有意义。
如果是想学通用的发行版的做法,可以考虑学习Arch或者Gentoo的脚本。
Arch的脚本是从LFS发展过来的,用的是initramfs -> rootfs的两部加载。
无论从哪个入手研究,都要弄明白加载顺序,即分几步,加载哪些文件系统,etc。 dr2001 发表于 2018-9-2 20:37
简单的方案是使用Gentoo,Arch等以命令行为主的发行版,体积不大且功能全面,还有足够的Wiki文档。
初期可 ...
真的和交叉编译差不多,不过把uboot换为grub,把gcc-arm换为gcc。但交叉编译环境都是别人设置好的,自己想创建一个就懵了。最简单的就是用x86_64_defconfig make一个kernel,不install都不知initrd怎么生产。 hl1200 发表于 2018-9-2 21:04
真的和交叉编译差不多,不过把uboot换为grub,把gcc-arm换为gcc。但交叉编译环境都是别人设置好的,自己 ...
X86到X86的话,基本不用“交叉编译”。而且,交叉编译只是需要一组特殊的编译器而已。
initramfs就是一个标准的rootfs(为了体积其将要完成的简单功能,用busybox概率高),只不过打包的时候用的CPIO,别的没区别。
用initramfs的目的是BootLoader会把它预先加载到内存,然后load module和初始化,这样kernel才能正确的加载真实的物理设备(rootfs)。
如果把对应的驱动直接编译进内核并且给足等待时间,initramfs不是必要的。
想深入了解的话,看一遍LFS,然后再看Arch的脚本,足够详尽。
学习这个没难度,就是牵扯的信息量比较大,资料比较分散,比较花时间。 dr2001 发表于 2018-9-3 08:07
X86到X86的话,基本不用“交叉编译”。而且,交叉编译只是需要一组特殊的编译器而已。
initramfs就是一 ...
initrd的确是很神奇的东西,是为了精简内核,把驱动移出来的产物,如果内核驱动少直接编译进去,initrd就没什么事了,如果像路由那样是个不需要怎么更改的rootfs,也可以把initrd做最终rootfs。
现在都想直接改initrd的init脚本,直接把initrd当做最终rootfs,可惜现在只会make,只会make moudles_install,make install则会把系统装在自己的机器,郁闷。 hl1200 发表于 2018-9-3 17:40
initrd的确是很神奇的东西,是为了精简内核,把驱动移出来的产物,如果内核驱动少直接编译进去,initrd就 ...
名称上,initrd多指以往的那个ramdisk,initramfs是指基于tmpfs做的新的ramdisk。具体区别网上有很多Blog了,Kernel doc印象中也有说明。
做一个initramfs很容易,LFS和Arch都有脚本可以直接参考,说白了就是建立路径,写几个基本的脚本,给出init进程,done。
如果你非要研究基于kbuild的构建方法,网上应该也有很多资料可以参考。
dr2001 发表于 2018-9-3 20:51
名称上,initrd多指以往的那个ramdisk,initramfs是指基于tmpfs做的新的ramdisk。具体区别网上有很多Blog ...
貌似lfs的开机脚本都没有详细的分析,现在用systemd开机,资料更少。基本都是发行版本做好,资料好少。
页:
[1]