linux 内核学习3-自己编译一个ARM Linux内核

2023-11-19

linux 内核学习3-自己编译一个ARM Linux内核

1. 目的

编译一个ARM版本的内核镜像,谁让我是做Android的呢!并且在QEMU上运行。

2. 准备工作

2.1 开发环境

  1. ubuntu 18.4虚拟机
  2. linux内核版本 4.19.67 linux内核地址
  3. busybox 工具包

3.编译过程

3. busybox编译

$ cd busybox
$ export ARCH=arm
$ export CROSS_COMPILE=arm-linux-gnueabi-
$ make menuconfig

进入menuconfig之后,配置成静态编译

Busybox Settings  ---->
	Build Options     ---->
			[*] Build BusyBox as a static binary  (no shared libs)
# make && make install

3.2创建必须的文件

这个时候在busybox根目录下回有一个_install目录,该目录存放了编译好的文件系统需要的一些命令合计
将_install 目录复制到linux-4.0 目录下。进入_install 目录,先创建etc、dev等目录。

# mkdir etc
# mkdir dev
# mkdir mnt
# mkdir -p etc/init.d/

在_install /etc/init.d/目录下新建一个rcS文件,并写入如下内容

mkdir -p /sys
mkdir -p /tmp
mkdir -p /proc
mkdir -p /mnt
/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

修改_install/etc/init.d/rcS 文件需要可执行权限,可以使用chmod命令来实现,比如chmod +x_install/etc/init.d/rcS
在_install /etc 目录中新建一个fstab文件,并写入如下内容。

proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0

文件

在_install /etc 目录中新建一个inittab文件,并写入如下内容

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

_install/dev 目录中创建如下设备结点,这时需要root权限。

cd _install/dev/
sudo mknod console c 5 1
sudo mknod null c 1 3

c创建的文件

3.3. 编译内核配置

$ cd linux-4.0
$ export ARCH=arm
$ export CROSS_COMPILE=arm-linux-gnueabi-
$ make vexpress_defconfig
$ make menuconfig
  1. 配置 initramfs,在 initramfs source file 中填入_install ,并把Default kernel command string清空

接着

 General setup  --->  
		  [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support 
        		 (_install) Initramfs source file(s)  

Boot options --->
	()Default kernel command string

Kernel Features --->
	Memory split(3G/1G user/kernel split)--->
	[*] High Memory Support

注意,(_install) Initramfs source file(s)这个要通过enter键进入,输入_install

3.4 开始编译内核

$ make bzImage -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
$ make dtbs

3.5 运行QEMU虚拟机

 qemu-system-arm -M vexpress-a9 -smp 4 -m 200M -kernel arch/arm/boot/zImage -append "rdinit=/linuxrc console=ttyAMA0 loglevel=8" -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic

4.其他

这里的操作流程参考的是奔跑吧linux内核入门篇。大家想学习linux内核,可以去买奔跑吧linux内核 入门篇和奔跑吧linux内核。
这里给到作者笨叔叔的学习资料 github地址 这里有笨叔叔调教好的linux内核。这来有他的视频教程 视频地址 内核地址

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux 内核学习3-自己编译一个ARM Linux内核 的相关文章

  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 就分页分段内存而言的程序寿命

    我对 x86 Linux 机器中的分段和分页过程有一个令人困惑的概念 如果有人能澄清从开始到结束所涉及的所有步骤 我们将很高兴 x86 使用分页分段内存技术进行内存管理 任何人都可以解释一下从可执行的 elf 格式文件从硬盘加载到主内存到它
  • 执行“minikube start”命令时出现问题

    malik malik minikube start minikube v1 12 0 on Ubuntu 18 04 Using the docker driver based on existing profile Starting c
  • 如何获取 (Linux) 机器的 IP 地址?

    这个问题和之前问的几乎一样如何获取本地计算机的IP地址 https stackoverflow com questions 122208 get the ip address of local computer 问题 但是我需要找到一个的I
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • CMake 链接 glfw3 lib 错误

    我正在使用 CLion 并且正在使用 glfw3 库编写一个程序 http www glfw org docs latest http www glfw org docs latest 我安装并正确执行了库中的所有操作 我有 a 和 h 文
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • 从 Xlib 转换为 xcb

    我目前正在将我的一个应用程序从 Xlib 移植到 libxcb 但在查找有关我有时使用的 XInput2 扩展的信息时遇到了一些麻烦 libxcb 中有 XInput2 实现吗 如果是的话 在哪里可以找到文档 目前我在使用此功能时遇到问题
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • 与 pthread 的进程间互斥

    我想使用一个互斥体 它将用于同步对两个不同进程共享的内存中驻留的某些变量的访问 我怎样才能做到这一点 执行该操作的代码示例将非常感激 以下示例演示了 Pthread 进程间互斥体的创建 使用和销毁 将示例推广到多个进程作为读者的练习 inc
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • 使用 gdb 调试 Linux 内核模块

    我想知道 API 在内核模块 中返回什么 从几种形式可以知道 这并不是那么简单 我们需要加载符号表来调试内核模块 所以我所做的就是 1 尝试找到内核模块的 text bss和 data段地址 2 在 gdb 中使用 add symbol f
  • Linux/POSIX:为什么 fork() 不分叉*所有*线程

    众所周知 POSIX下创建新进程的默认方式是使用fork 在 Linux 下 这在内部映射到clone 我想知道的是 众所周知 当一个人打电话时fork 子进程是用单个线程创建的 调用的线程fork cf https linux die n
  • 我什么时候应该编写 Linux 内核模块?

    有些人出于某种原因想要将 Linux 中的代码从用户空间移动到内核空间 很多时候 原因似乎是代码应该具有特别高的优先级 或者只是 内核空间更快 这对我来说似乎很奇怪 我什么时候应该考虑编写内核模块 有一套标准吗 我怎样才能激励将代码保存在
  • 如何在 Mac OSX Mavericks 中正确运行字符串工具?

    如何在 Mac OSX Mavericks 中正确运行字符串工具 我尝试按照我在网上找到的示例来运行它 strings a UserParser class 但我收到此错误 错误 Applications Xcode app Content
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • 在 scp 的简单函数包装中使用波形符 ~ 时出现问题

    我想放置一个简单的bash功能在我的 bashrc围绕着scp通过接受 源 参数和 目标 参数来命令 到目前为止已经尝试过 function send eval scp 1 user annoyingly long server name
  • 从核心转储中获取堆栈跟踪

    如何从核心转储文件中获取堆栈跟踪 该文件大约 14 mb 是在我的应用程序退出并显示 分段错误 后生成的 我使用的是红帽 5 5 gdb usr bin myapp binary corefile 然后 使用以下之一 gdb bt gdb
  • 跨 CPU 内核的 rdtsc 精度

    我从一个线程发送网络数据包 并在运行于不同 CPU 核心上的第二个线程上接收回复 我的流程测量每个数据包发送和接收之间的时间 类似于 ping 我使用 rdtsc 来获得高分辨率 低开销的计时 这是我的实现所需要的 所有测量结果看起来都很可

随机推荐

  • 有效的域名后缀列表

    Version 2016060300 Last Updated Fri Jun 3 07 07 01 2016 UTC AAA AARP ABB ABBOTT ABBVIE ABOGADO ABUDHABI AC ACADEMY ACCEN
  • ffmpeg命令详解_火爆抖音60帧视频制作教程详解

    针对目前火爆抖音的超清60帧视频 今晚写一篇详细的制作教程 供大家分享 声明 60帧视频制作教程详解 文章内容为本人原创 转载请注明出处 首先再做学做补帧教程之前 大家要明白帧率的提升只是画面流畅度的提升 而非画面清晰度的提升 但是两者是有
  • 怎么写文献综述

    文献综述是由原始文献中大量的数据 资料 不同观点加以梳理整合后所形成的 文献综述的撰写时要将客观资料与主观论断融为一体 但是不能述评鲜明的表达作者本人的观点和立场 文献综述需要包含以下内容 问题提出的背景 发展过程 基本理论 最新成就 存在
  • Unity3D 碰撞器和触发器

    对于碰撞器和触发器经常忘记用法 这次主要记录下以便于能够复习用 1 碰撞器 发生条件 1 碰撞的双方中一定至少要有一个Rigidbody存在 并且碰撞双方必须都要有碰撞体组件 2 碰撞双方若只有一个有刚体 那么那个刚体一定要处于运动的状态下
  • Redis爬坑记(一):incr命令和expire命令的误区

    关注公众号 要实现的功能 限制用户的每分钟的访问次数 一个有严重bug的代码 每次访问来了 就执行代码块二 当第一次访问 就走else语句 设置当前用户的次数为1 且设置该key的有效期是一分钟 在一分钟之内 第二次来访问了 就走if语句了
  • XSS常见的触发标签

    无过滤情况 img 图片加载错误时触发 img src x img src 1 鼠标指针移动到元素时触发 img src 1 鼠标指针移出时触发 img src 1 a a href https www qq com qq a a href
  • 微信小程序开发通过mock后台数据,如何使用mock模拟后台数据,以及在小程序中使用

    作为一名前端开发人员 应该有很多像我一样不会写后台接口 但是网上非常多的项目都是需要后台数据支持的 这个时候前端开发人员可能会犯愁 现在我给大家推荐一个网站 可以帮助我们简单模拟后代数据 1 首先 在该网址https www fastmoc
  • 实验1-FPGA编程入门

    文章目录 一 认识全加器 二 输入原理图实现1位加法器 一 半加器原理图输入 二 全加器原理图输入 三 Verilog语言实现全加器 四 总结 五 资料参考 一 认识全加器 一 半加器 1 逻辑分析 如下图所示 半加器只有两个输入和两个输出
  • Windows10自动更新-修改注册表

    Win r 输入 regedit 打开注册表 注册表路径 HKEY LOCAL MACHINE SYSTEM ControlSet001 Services wuauserv Parameters 后面加了个 disable 方便以后改回来
  • 比较两个 List 的值是否相等

    public static
  • python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告

    前言 1 环境准备 python3 6 requests xlrd openpyxl HTMLTestRunner api 2 目前实现的功能 封装requests请求方法 在excel填写接口请求参数 运行完后 重新生成一个excel报告
  • Flutter进阶实战 6-20 酷炫的路由动画-2

    前言 前面在路由动画1中我们介绍了 渐隐渐现过度动画 的使用 这里再介绍三种动画以及叠加动画的使用 一 缩放路由动画 return ScaleTransition scale Tween begin 0 0 end 1 0 animate
  • 保存文件为UTF8格式(Writing UTF-8 files in C++).

    都是简单的单词 我就不翻译了 原文地址 http mariusbancila ro blog 2008 10 20 writing utf 8 files in c Let s say you need to write an XML fi
  • Ant design 组件实现动态列表

    文章目录 一 动态列表 二 场景实现 实现效果 实现代码 一 动态列表 动态列表Form List是包含多个表单的情况 往往是多维数组数据 意思就是往往这个数据传递到后端是数组数据 二 场景实现 实现效果 实现代码 import React
  • Nacos快速入门(一):Nacos初探

    1 简介 Nacos官网 https nacos io zh cn index html 1 1 概览 Nacos 致力于帮助您发现 配置和管理微服务 Nacos 提供了一组简单易用的特性集 帮助您快速实现动态服务发现 服务配置 服务元数据
  • Linux_CentOS8_磁盘管理_磁盘大小调整_`No space left on device` (2)

    Issue CentOS8 in the VMware No space left on device 1 Issue Description Initially 20G Hard Disk SCSI was portioned to th
  • Python的复制,深拷贝和浅拷贝的区别

    在python中 对象赋值实际上是对象的引用 当创建一个对象 然后把它赋给另一个变量的时候 python并没有拷贝这个对象 而只是拷贝了这个对象的引用 一般有三种方法 alist 1 2 3 a b 1 直接赋值 传递对象的引用而已 原始列
  • 三目运算的多目运算技巧(三种及三种以上的状态怎么使用)

    1 使用场景 当有人一提到三目运算就会想着用0 1代表男女等的显示问题 只有两种状态值 但你有没有想过当状态不止两种的时候 比如三种及以上的时候 也可以使用三木运算呢 答案是可以 比如常用的vue数据渲染的时候 div class Bott
  • IntelliJ Idea 常用快捷键列表

    IntelliJ Idea 常用快捷键列表 Ctrl Shift Enter 语句完成 否定完成 输入表达式时按 键 Ctrl E 最近的文件 Ctrl Shift E 最近更改的文件 Shift Click 可以关闭文件 Ctrl OR
  • linux 内核学习3-自己编译一个ARM Linux内核

    linux 内核学习3 自己编译一个ARM Linux内核 1 目的 编译一个ARM版本的内核镜像 谁让我是做Android的呢 并且在QEMU上运行 2 准备工作 2 1 开发环境 ubuntu 18 4虚拟机 linux内核版本 4 1