搜索
bottom↓
回复: 14

求教:如何在本机为别的电脑制作一个linux系统?

[复制链接]

出0入0汤圆

发表于 2018-8-24 10:09:01 | 显示全部楼层 |阅读模式
目前有两台电脑,一台是工作电脑,装有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的执行文件。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入442汤圆

发表于 2018-8-24 10:57:50 来自手机 | 显示全部楼层
据我所知,kernel就是个文件,直接替换了。。

出0入0汤圆

发表于 2018-8-24 11:12:12 来自手机 | 显示全部楼层
wye11083 发表于 2018-8-24 10:57
据我所知,kernel就是个文件,直接替换了。。

驱动和lib是依赖kernel的,执行文件依赖lib,单纯换kernel文件,驱动出错,直接panic

出0入0汤圆

发表于 2018-8-24 11:22:17 | 显示全部楼层
虚拟机,随便拷,还能打快照。

出0入0汤圆

发表于 2018-9-2 17:43:53 来自手机 | 显示全部楼层
aozima 发表于 2018-8-24 11:22
虚拟机,随便拷,还能打快照。

不是搞虚拟机,是我有个z8300的本,想搞个linux系统给它用,不想装发行版本。话说在z8300上编译内核真心慢。

出0入75汤圆

发表于 2018-9-2 18:14:54 | 显示全部楼层
虚拟机,挂载U盘,做好系统设置好之后再插另一台电脑上。

出0入0汤圆

发表于 2018-9-2 18:42:59 来自手机 | 显示全部楼层
Doding 发表于 2018-9-2 18:14
虚拟机,挂载U盘,做好系统设置好之后再插另一台电脑上。

虚拟机也要kernel,也要initrd,也要rootfs吧,这些怎么制作出来?

出0入75汤圆

发表于 2018-9-2 19:49:51 | 显示全部楼层
hl1200 发表于 2018-9-2 18:42
虚拟机也要kernel,也要initrd,也要rootfs吧,这些怎么制作出来?

虚拟机加载安装光盘镜像,直接安装,不就行了吗?换成电脑引导,有可能会出不少错。

出0入0汤圆

发表于 2018-9-2 20:27:11 来自手机 | 显示全部楼层
Doding 发表于 2018-9-2 19:49
虚拟机加载安装光盘镜像,直接安装,不就行了吗?换成电脑引导,有可能会出不少错。 ...

发行版本太多东西了,不想安装。只想编译基础系统加自己的程序。

出0入0汤圆

发表于 2018-9-2 20:37:30 | 显示全部楼层
本帖最后由 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。

出0入0汤圆

发表于 2018-9-2 21:04:52 来自手机 | 显示全部楼层
dr2001 发表于 2018-9-2 20:37
简单的方案是使用Gentoo,Arch等以命令行为主的发行版,体积不大且功能全面,还有足够的Wiki文档。
初期可 ...

真的和交叉编译差不多,不过把uboot换为grub,把gcc-arm换为gcc。但交叉编译环境都是别人设置好的,自己想创建一个就懵了。最简单的就是用x86_64_defconfig   make一个kernel,不install都不知initrd怎么生产。

出0入0汤圆

发表于 2018-9-3 08:07:20 | 显示全部楼层
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的脚本,足够详尽。
学习这个没难度,就是牵扯的信息量比较大,资料比较分散,比较花时间。

出0入0汤圆

发表于 2018-9-3 17:40:48 来自手机 | 显示全部楼层
dr2001 发表于 2018-9-3 08:07
X86到X86的话,基本不用“交叉编译”。而且,交叉编译只是需要一组特殊的编译器而已。

initramfs就是一 ...

initrd的确是很神奇的东西,是为了精简内核,把驱动移出来的产物,如果内核驱动少直接编译进去,initrd就没什么事了,如果像路由那样是个不需要怎么更改的rootfs,也可以把initrd做最终rootfs。
现在都想直接改initrd的init脚本,直接把initrd当做最终rootfs,可惜现在只会make,只会make moudles_install,make install则会把系统装在自己的机器,郁闷。

出0入0汤圆

发表于 2018-9-3 20:51:21 | 显示全部楼层
hl1200 发表于 2018-9-3 17:40
initrd的确是很神奇的东西,是为了精简内核,把驱动移出来的产物,如果内核驱动少直接编译进去,initrd就 ...

名称上,initrd多指以往的那个ramdisk,initramfs是指基于tmpfs做的新的ramdisk。具体区别网上有很多Blog了,Kernel doc印象中也有说明。

做一个initramfs很容易,LFS和Arch都有脚本可以直接参考,说白了就是建立路径,写几个基本的脚本,给出init进程,done。

如果你非要研究基于kbuild的构建方法,网上应该也有很多资料可以参考。

出0入0汤圆

发表于 2018-9-16 09:36:12 来自手机 | 显示全部楼层
dr2001 发表于 2018-9-3 20:51
名称上,initrd多指以往的那个ramdisk,initramfs是指基于tmpfs做的新的ramdisk。具体区别网上有很多Blog ...

貌似lfs的开机脚本都没有详细的分析,现在用systemd开机,资料更少。基本都是发行版本做好,资料好少。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 07:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表