linux 内核学习2-使用笨叔叔定制的内核

1. 目的

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

2. 准备工作

2.1 开发环境

  1. ubuntu 18.4虚拟机
  2. 笨叔叔调教好的linux源码 源码地址

2.2 需要下载的软件包

sudo apt-get install qemu libncurses5-dev gcc-arm-linux-gnueabi build-essential gcc-5-arm-linux-gnueabi git

2.3 切换gcc版本

ubuntu 18.4 自带的gcc版本是7.+的版本,但是linux 4.+ 版本需要的编译器版本是 5.5 所以需要切换gcc版本号

使用update-alternatives 更换gcc版本,说实话,这个是我第一次知道gcc是可以动态切换版本的
update-alternatives使用方式

可以通过
update-alternatives  -help 查看具体参数和含义
update-alternatives    --install <link> <name> <path> <priority>
link :指向/etc/alternatives/<name>
name :链接名称
path : 这个对应可执行的文件的实际路径
priority: 这个是优先级,数字越大,优先级越高
  • 添加一个arm-linux-gnueabi-gcc-5的链接配置并设置优先级
sudo update-alternatives  --install /usr/bin/arm-linux-gnueabi-gcc arm-linux-gnueabi-gcc /usr/bin/arm-linux-gnueabi-gcc-5 5update-alternatives:using /bsr/bin/arm-linux-gnueabi-gcc-5 to provide /usr/bin/arm-linux-linux-gnueabi-gcc (arm-linux-gnueabi-gcc) in auto mode
  • 添加一个arm-linux-gnueabi-gcc-7的链接配置并设置优先级
sudo update-alternatives  --install /usr/bin/arm-linux-gnueabi-gcc arm-linux-gnueabi-gcc /usr/bin/arm-linux-gnueabi-gcc-7 7update-alternatives:using /bsr/bin/arm-linux-gnueabi-gcc-7 to provide /usr/bin/arm-linux-linux-gnueabi-gcc (arm-linux-gnueabi-gcc) in auto mode
  • 使用update-alternatives命令来添加一个配置
sudo update-alternatives --config arm-linux-gnueabi-gcc

会提示如下的选择框


[sudo] password for groot:
There are 2 choices for the alternative arm-linux-gnueabi-gcc (providing /usr/bin/arm-linux-gnueabi-gcc).Selection    Path                              Priority   Status
------------------------------------------------------------0            /usr/bin/arm-linux-gnueabi-gcc-7   7         auto mode
* 1            /usr/bin/arm-linux-gnueabi-gcc-5   5         manual mode2            /usr/bin/arm-linux-gnueabi-gcc-7   7         manual modePress <enter> to keep the current choice[*], or type selection number: 

这里输入数字1 选择gcc-5的版本

  • 查看arm-linux-gnueabi-gcc版本

$ arm-linux-gnueabi-gcc -vUsing built-in specs.
COLLECT_GCC=arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/5/lto-wrapper
Target: arm-linux-gnueabi
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 5.5.0-12ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --enable-plugin --with-system-zlib --enable-multiarch --enable-multilib --disable-sjlj-exceptions --with-arch=armv5t --with-float=soft --disable-werror --enable-multilib --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabi --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include
Thread model: posix
gcc version 5.5.0 20171010 (Ubuntu/Linaro 5.5.0-12ubuntu1)

3.编译内核

3.1下载笨叔叔调整好的内核

建议下载zip包,使用git clone的方式下载速度很慢

git clone https://github.com/figozhang/runninglinuxkernel_4.0.git
git checkout rlk_basic

3.2编译内核

$ cd runninglinuxkernel-4.0
$ export ARCH=arm
$ export CROSS_COMPILE=arm-linux-gnueabi-
$ make vexpress_defconfig
$ make menuconfig

3.4创建设备结点,在_install_arm32/dev目录下创建如下设备结点,这时需要root权限

$ cd _install_arm32
$ mkdir dev
$  cd dev
$  sudo mknod console c 5 1

3.5开始编译内核

$ make bzImage -j4
$ make dtbs

3.6运行QEMU虚拟机

./run.sh arm32

3.7关闭QEMU虚拟机

  • 方法一

      ```在另外一个终端中,输入$  killall qemu-system-arm```
    
  • 方法二

    在之前的终端中
    Ctrl+a 之后再输入 x 就可以关闭QEMU
    

3.8 QEMU虚拟机的文件共享

复制一个文件到 runninglinuxkernel-4.0/kmodules

$cp test.c runninglinuxkernel-4.0/kmodules

启动QEMU虚拟机之后,首先检查一下/mnt目录是否有test.c 文件。

/ # cd /mnt/
/mnt # ls
README test.c
/mnt #

4.其他

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

linux 内核学习2-使用笨叔叔定制的内核相关推荐

  1. Linux 内核学习知识:浅析 offsetof 宏以及内核开发学习的所思所想(内核开发人员必读)

    最近一头扎进了 Linux 内核的学习中,Linux 内核的学习,需要的基础知识太多太多了:C 语言.汇编语言.数据结构与算法.操作系统原理.计算机组成原理.计算机体系结构.在囫囵吞枣补完一些计算机基 ...

  2. 笨叔叔的linux内核课程_一位叔叔的礼物Linux

    笨叔叔的linux内核课程 那是1996年.确切地说是1996年12月. 我刚上完大学的第一学期,然后在圣诞节叔叔在纽约杰斐逊港的公寓里度过圣诞节. 我叔叔是一名博士生,研究计算几何,并渴望向我展示他 ...

  3. 专访笨叔叔:2019年可能是Linux年?

    来源 | 异步专访 | 审校 张爽 ​​ 2017年9月<奔跑吧 Linux内核>一书出版后得到了广大Linux从业人员和爱好者(特别是从事Linux相关产品开发的工程师)的好评,也有不少 ...

  4. Linux内核学习路线

    [推荐阅读] 手把手教你如何编写一个Makefile文件 一文讲解,Linux内核--内存管理(建议收藏) 当Linux内存耗尽时,改如何处理! 一文看懂页面置换算法 内核学习路线 很多同学接触Lin ...

  5. Linux内核学习四库全书

    关于内核学习我建议不要上来就读内核而是先了解内核的构成和特性,然后通过思考发现疑问这时再去读内核源码.即先了解概貌在读局部细节.而且内核分成好多部分,不要只是按照顺序去读,应该针对某一部分比如内存管理 ...

  6. Linux内核学习总结

    作业一计算机是如何工作的进行http://www.cnblogs.com/zhengwei0712/p/5207299.html 作业二操作系统是如何工作的进行http://www.cnblogs.c ...

  7. Linux内核学习--内存管理模块

    Linux内核学习--内存管理模块 首先,Linux内核主要由五个部分组成,他们分别是:进程调度模块.内存管理模块.文件系统模块.进程间通信模块和网络接口模块. 本部分所讲的内存是内存管理模块,其主要 ...

  8. linux内核学习之三:linux中的32位与64位

    linux内核学习之三:linux中的"32位"与"64位" 在通用PC领域,不论是windows还是linux界,我们都会经常听到"32位" ...

  9. Linux疑难杂症解决方案100篇(十五)-万字长文带你深入Linux 内核学习:环境搭建和内核编译

    一.linux内核学习之一:环境搭建--安装Debian7.3 本系列文章假设读者已对linux有一定的了解,其实学习linux内核不需要有很深的关于linux的知识,只需要了解以下内容:linux基 ...

最新文章

  1. Ansible基础一Playbook(二)
  2. 小计算器代码(C#)
  3. python在线课程价格-杭州python课程价格
  4. deepin卸载了python_Deepin-Linux下python卸载与安装(失败的折腾)
  5. java md5 密钥_java加密算法--MD5加密和哈希散列带秘钥加密算法源码
  6. 如何设置 jqplot 图表插件的标题图例和直线
  7. Docker + Zookeeper + SolrCloud(8.1.1)跨主机搭建集群有问题
  8. MySQL 5.7新特性
  9. Python使用ffmpeg下载m3u8拼接为视频
  10. IO 模型 IO 多路复用
  11. linux pdf 编辑图层,PDF SDK DEMO
  12. 倍福PLC TwinCAT 3 基础——编程基础
  13. PADS9.5实战攻略与高速PCB设计-强烈推荐教程资料(完整书签)
  14. 微型计算机任务名称,任务五微型计算机的硬件组成.ppt
  15. 模拟CMOS集成电路设计中的电流镜及用Cadence Virtuoso IC617设计并仿真有关电路
  16. Qt创建桌面快捷方式
  17. 小米手机微信指纹支付上传服务器吗,小米MIUI支持微信指纹支付吗 小米MIUI微信指纹支付【图文】...
  18. SQL中常用的字符串LEFT函数和RIGHT函数详解
  19. 自学IT 必去的两个学习网站
  20. Android 高德地图的开发

热门文章

  1. spss可以关键词词频分析吗_一种有效的多关键词词频统计方法
  2. 【初识C语言】第一篇
  3. 为Table中的thead加上边框
  4. PyTorch实战Kaggle之Dogs vs. Cats
  5. CSS插入背景图片并且充满整个容器
  6. 零基础小白如何学会Java?
  7. bond解除 centos7_centos7.1-bond丢包问题
  8. 一套完整的三甲医院医学影像科PACS系统源码
  9. 『Python开发实战菜鸟教程』工具篇:手把手教学使用VSCode开发Python
  10. 谈一谈在两个商业项目中使用MVI架构后的感悟