Linux内核开发_将Linux内核打包成img文件
接着之前两个文章我们已经编译了Linux内核和制作了一个文件系统
这一步我们将它们打包成一个img软盘文件
1.使用DD命令创建一个镜像的img文件
sudo dd if=/dev/zero of=my_linux.img bs=1M count=128
2.使用fdisk命令给镜像文件分区
sudo fdisk my_linux.img
2.1输入n命令创建分区
2.2输入p创建主分区
2.3分区号设置为1,代表我们的主引导分区
2.4第一个扇区大小输入默认值,或者直接回车
2.5Last sector直接按下回车,使用默认值
这个选项是指定终止分区扇区大小,如果我们直接回车则会自动以结尾扇区作为大小
我们刚刚创建的大小是128个块,128MB,这里会预留1MB作为文件格式头,所以是127MB
2.6w写入
3将文件系统挂载到/dev/loop上
我们的设备是非物理设备的文件系统,所以需要使用loop设备文件来挂载
sudo losetup -o 1048576 /dev/loop0 my_linux.img
可能会出现:
这种情况下我们可以不停的修改loop索引号来寻找没有挂载的
将loop0改成loop1,loop2依次类推
或者可以使用umount命令卸载指定loop设备在挂载
sudo umount /dev/loop0
4.格式化我们的分区,格式化成ext4文件系统,这是linux内核目前主要支持的文件系统
你也可以改成别的文件系统,前提是linux内核支持,同时你要在编译选项里修改它的文件系统支持
sudo mkfs.ext4 /dev/loop0
5.创建一个文件夹用于挂载我们的文件系统
sudo mkdir my_linux
6.将文件系统挂载到这个目录下,便于操作
sudo mount -t ext4 /dev/loop0 my_linux
7.进入到my_linux目录
cd my_linux
8.创建boot目录
该目录为了支持grub引导程序而创建,创建此目录是为了符合grub的引导文件目录体系
sudo mkdir boot
9.将我们的bzImage与rootfs.img文件copy到此目录下
sudo cp /usr/src/linux_kernel/arch/x86/boot/bzImage .
sudo cp /usr/src/busy/rootfs.img .
10.安装grub
回到我们刚刚创建img文件的目录
然后输入如下命令:
sudo grub-install --boot-directory=./my_linux/boot/ --target=i386-pc --modules=part_msdos my_linux.img
我们可以看到刚刚创建的boot的目录下有一个grub目录
这个目录下是没有grub.cfg文件的,我们需要手动创建与配置
11.编写grub.cfg
1.进入到grub目录下
cd grub
2.编写grub.cfg
sudo vim grub.cfg
输入如下:
menuentry "my_linux" {linux (hd0,msdos1)/boot/bzImage root=/dev/ram rw init=/bin/ashinitrd (hd0,msdos1)/boot/initrd.img
}
msdos代表mbr分区,hd代表硬盘,现在流行分区格式只有msdon(mbr),gpt
12.卸载挂载
sudo umount /dev/loop0
好了,至此,我们的img镜像文件已经创建好了,使用qemu运行一下看看
sudo qemu-system-x86_64 my_linux.img
可以看到grub正确找到我们的系统,这里我的grub为2.4也就是grub2
回车可以进入系统
Linux内核开发_将Linux内核打包成img文件相关推荐
- .net core 文件流保存图片_如何将图片打包成PDF文件进行保存?
如何将图片打包成PDF文件进行保存?我们都知道PDF文件是一种电子文档发行和数字化信息传播的理想文档格式,支持跨平台传输.对普通读者而言,用PDF制作的电子书具有纸版书的质感和阅读效果,可以逼真地展现 ...
- Linux系统获取开发板的文件系统并打包成img文件
应用情形: 在实际的开发中,由于原系统包含的功能有限,而根据项目的需要,安装了相应的库及运行项目程序所创建的各种文件,和所做 的各种配置,想将调试好的系统打包发布,进行批量生产,就可参考本文提 ...
- pip工具可以打包python源代码吗_将python源文件打包成exe文件
pyinstaller 库的使用 PyInstaller是一个十分有用的第三方库,它能够在Windows.Linux.Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包,Py ...
- python 解析pb文件_将tensorflow模型打包成PB文件及PB文件读取方式
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- APP代码打包成apk文件
序言 该篇文章对于APP云打包功能进行讲解,欢迎大家指出问题和发表建议! 生成证书文件 APP开发完成之后,需要打包成apk文件安装到手机上. 生成证书文件之前需要 Android Studio文件( ...
- linux内核开发入门二(内核KO模块介绍、开发流程以及注意事项)
linux内核开发入门二(内核KO模块介绍.开发流程以及注意事项) 一.什么是内核模块 内核模块:ko模块(Kernel Object Module)是Linux内核中的可加载模块,它可以动态地向内核 ...
- Linux驱动开发_设备文件系统详解
目录 何为设备管理器? Linux下dev的作用 Devfs sysfs kobject udev proc 何为设备管理器? 设备管理器就是负责管理这台电脑上的外设,当我们通过电脑提供的USB口插入 ...
- 开源社区推广相关(七)|关于建立PostgreSQL内核开发交流群及内核开发资料分享git仓库的说明
目录结构 关于建立PostgreSQL内核开发交流群及内核开发资料分享git仓库的说明 PostgreSQL内核开发交流群 PostgreSQL内核开发的资料 PostgreSQL内核开发交流群 大家 ...
- windows内核开发笔记七:内核开发OVERLAPPED结构体详解
windows内核开发笔记七:内核开发OVERLAPPED结构体详解 typedef struct _OVERLAPPED { DWORD Internal; DWORD InternalHi ...
最新文章
- 2D目标检测CVPR2020总结
- 高通android开发摘要
- 实现物联网项目,你需要提前知道的6件事情
- html表格怎么设置浮动,html – 表格布局和浮动左和引导网格
- 推荐几个程序员学习网站
- JS获取对象的第一个值
- PyQT简单入门--hello world
- 录音软件行业调研报告 - 市场现状分析与发展前景预测
- halfstone 原理_打水漂的原理研究
- 电路里的希腊字母读音
- antv,图表和地图
- cass简码大全_考考你......列出 南方cass 简码指令50个。
- C++ string大小写转换
- av_opt_set函数族详解
- 计算机基础:调整显示器分辨率及刷新率
- [翻译]现代java开发指南 第二部分
- linux主机通过top看CPU性能指标
- (零代) MDD 开创低代码领行设计模式
- (7)-HALCON图像采集助手:界面介绍
- 划词搜索被ewido视为高风险Adware.wSerarch
热门文章
- matlab2013语言设置,科学网—macOS MATLAB 更改界面语言设置——中文改为英文 - 李航的博文...
- Android Studio实现学生信息管理系统,基础入门项目
- mybatis plus 动态创建表和字段_mybatis-plus maven代码生成器
- android 挖孔屏适配_小米公布安卓Q升级适配计划,共11款机型
- cenyos7安装 yum不可用_小区阳台隐形网横管不可用扁管,要改再去安装,还有问题...
- lambda函数if_现代 C++:Lambda 表达式
- java stream流_恕我直言你可能真的不会java第4篇:Stream管道流Map操作
- 期末C语言45分能过的吗,C语言—期末小黄衫获奖感言
- python模拟购物车流程_用函数模拟简单的购物车(Python)
- java 多列 统计_java – 如何计算多列(colspan)HTML表的宽度?