摘要:能不能在ARM板上运行Ubuntu呢?答案肯定是可以的,Ubuntu是Linux系统的一种,可以简单的将Ubuntu理解为一个根文件系统,和我们用busybox、buildroot制作的根文件系统一样。因此移植Ubuntu也就是将Ubuntu根文件系统移植到我们的开发板上。
如果大家做过linux系统移植、或者Linux相关开发,对根文件系统这个名词应该很熟悉,在搭建嵌入式开发环境过程中,移植bootloader,移植kernel制作根文件系统是必须要做3件事情。
这篇文章简单我们来一起梳理嵌入式Linux的一些知识,方便于一些想跟我一样想要由单片机进阶到嵌入式Linux的朋友做一些参考学习。
嵌入式系统三大部分:bootloader(uboot)、Linux内核、根文件系统。
/proc –proc文件系统是内核与用户的接口,将内核的一些信息反映到此目录下
一套linux体系,只有内核本身是不能工作的,必须要 rootfs 上的 etc 目录下的配置文件、/bin /sbin 等目录下的 shell 命令,还有 /lib 目录下的库文件等···)相配合才能工作 。
1.1在嵌入式系统中的根文件系统与桌面版的根文件系统文件基本上类似,所以用Ubuntu中根文件系统问模板,进行分析:
在 ubuntu cdimg[1] 下载,选择 ubuntu-base-16.04.6-base-armhf.tar.gz。
建立交叉开发环境 配置开发主机 移植bootloader linux内核移植 建立并烧写根文件系统到目标板 开发嵌入式应用程序 部署与配置系统 (1)建立交叉开发环境 开发主机的操作系统一般选用某一个发行版本号的linux系统,如RedHatlinux等。linux内核版本号能够依据项目的详细需求而定,如2.4内核或者2.6内核。选择定制安装或所有安装,通过网络下载对应的gcc交叉编译器进行安装(比方arm-linux-gcc,arm-uclibc-gcc等),或者安装产品厂家提供的交叉编译器。 (2)配置开发主机 配置开发主机包含在开发主机上安装linux系统,配置交叉连接工具,如串口和网络接口。 (3)建立引导装载程序bootloader 从网络上下载一些公开源码的bootloader,依据自己详细芯片进行移植改动。
linux作为一款流行的嵌入式系统,目前已经有多种架构的MCU支持Linux移植,arm64就是其中一种。今天在这里想做一个笔记,记录一下完整的arm64移植过程。
之前系列的文章介绍了如何编译Uboot、Kernel以及使用默认的ramdisk根文件系统来构建一个完整的嵌入式Linux系统,本篇文章介绍如何从头制作一个放在NAND Flash上的根文件系统。经过我这段时间的总结,rootfs相关的编译、配置等工作还是比较麻烦的。所以你可能会看到一般做核心板的第三方厂家会建议初学者直接使用现成提供的文件系统,比如一个做NUC972核心板的厂家,其文档里这么描述:
物联网近几年的发展非常的火热,各种智能设备的出现使得智能家居的发展越来越快。虽然发展火热,却没有统一的标准,所以智能家居监控系统需要一种稳定统一的解决方案。
类似于Windows下的C、D、E等各个盘,Linux系统也可以将磁盘、Flash等存储设备划分为若干个分区,在不同分区存放不同类别的文件。与Windows的C盘类似,Linux一样要在一个分区上存放系统启动所必需的文件,比如内核映象文件(在嵌入式系统中,内核一般单独存放在一个分区中)、内核启动后运行的第一个程序(init)、给用户提供操作界面的shell程序、应用程序所依赖的库等。这些必需的、基本的文件,合称为根文件系统,它们存放在一个分区中。Linux系统启动后首先挂接这个分区──称为挂接(mount)根文件系统。其他分区上所有目录、文件的集合,也称为文件系统,比如我们常说:“挂接硬盘第二个分区”、“挂接硬盘第二个分区上的文件系统”。
Buildroot是Linux平台上一个构建嵌入式Linux系统的框架,整个Buildroot是由Makefile脚本和Kconfig配置文件构成。可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各种库和应用程序)。制作的rootfs通常需要包含很多第三方软件,比如busybox,udhcpc,tftp,apache,sqlite,PHP,iptable,DNS等,为避免复杂的移植工作,在buildroot中通过menuconfig配置我们根文件系统中需要的功能,将不需要的去掉,再执行make编译,buildroot就会自动从指定的服务器上下载源码包,自动编译,自动搭建我们所需要的嵌入式根文件系统。
可能是年前跳槽的比较多,遇到不少同学咨询到嵌入式行业发展和职业规划的问题,这里总结一下嵌入式行业的机遇和选择,希望对读者们有所帮助。 我们暂且宏观上把程序员分为3类:业务类,专业类,系统类。 业务类 业务类更多的是在应用程序。随着移动互联网的快速发展出现一批 UI 设计师,这里的设计师是指 APP 的界面设计,在注重用户体验的今天对于界面的设计出现水涨船高的需求。一时间 Android, IOS 的 APP 开发者如雨后春笋般涌出,待遇也是不低。高级的应用程序员除了界面的开发外也会涉及程序内部的业务逻辑,现
可能是年前跳槽的比较多,遇到不少同学咨询到嵌入式行业发展和职业规划的问题,这里总结一下嵌入式行业的机遇和选择,希望对读者们有所帮助。
在上一篇文章鸿蒙系统研究之三:迈出平台移植第一步,我们将内核加载并启动,但缺少根文件系统。这篇文章我们来探讨一下根文件系统的制作。
文件系统是os用来明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。 文件系统由三部分组成:文件系统的接口,对对象操作和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
可能是最近跳槽的比较多,遇到不少同学咨询到嵌入式行业发展和职业规划的问题,这里总结一下嵌入式行业的机遇和选择,希望对读者们有所帮助。
linux中有一个让很多初学者都不是特别清楚的概念,叫做“根文件系统”。我接触linux前前后后也好几年了,但是对这个问题,至今也不是特别的清楚,至少没法给出一个很全面很到位的解释。于是,今天我们就来理一理这个话题。
前面几篇介绍了uboot的移植与内核的移植,本篇进行根文件系统的构建,这是Linux移植三大组成部分的最后一步,根文件系统构建好后,就构成了一个基础的、可以运行的嵌入式Linux最小系统。
参考博文: http://blog.51cto.com/9291927/1791237
接触Freescale/NXP的I.MX6处理器大概有了两年多的时间,对于一个最初玩MCU的我来说,真是面临了很多的挑战。最让我感到郁闷和崩溃的是那个官方的基于Yocto的开发环境,搭建它要求真是太高了,机器得有上百G的空间,Ubuntu系统版本也有要求,另外还得去理解Yocto的架构。我在尝试过两次之后准备彻底的放弃研究它了。前两天由于工作需要,不得不再一次面对要自己去编译文件系统的问题,碰巧在网上看到有人用Buildroot弄成功过,我尝试了下,没太费力气就成功了,Buildroot比Yocto简单太多了。特以此文记录下,希望对大家有所帮助。
上篇文章介绍了根文件系统的制作与NFS网络挂载,这篇文章介绍内核如何从本地挂载根文件系统,完成系统启动。本地挂载一般用在产品发布的时候,本地挂载的操作也分为两种。
NXP 会从linux内核官网下载某个版本,然后将其移植到自己的 CPU上,测试成功后就会将其开放给NXP的CPU开发者。开发者下载 NXP 提供的 Linux 内核,然后将其移植到自己的产品上。
在制作Initramfs文件系统之前,我先简单介绍下linux各文件系统。linux支持多种文件系统类型,包括ext2,ext3,vfat,jffs,
分别是: 1、Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则; 2、配置文件(config.in):给用户提供配置选择的功能; 3、配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。
在这里总结一下我在移植Linux2.6.22.6内核过程时的步骤。移植成功后最终能挂接做好的根文件系统,并且启动第一个init程序。移植的步骤如下:
鸿蒙是一套完整的、普通人可以直接使用的操作系统,跟Windows、安卓、IOS类似。
在第一期视频 : 第0课第7节_刚接触开发板之制作根文件系统及初试驱动.wmv ,因为要测试驱动,所以必须要把驱动程序弄到开发板里才行。 于是韦老师介绍了两种方式:
前一阵子在公司移植Linux2.6到一块ARM11的开发板上,下面粗略讲讲移植Linux的一般过程。
鸿蒙是一套完整的、普通人可以直接使用的操作系统,跟Windows、安卓、IOS类似。 常见的错误观点是把鸿蒙跟Linux放在一起来对比,这不对:
在众多嵌入式操作系统中,Linux目前发展最快、应用最为广泛。性能优良、源码开放的Linux具有体积小、内核可裁减、网络功能完善、可移植性强等诸多优点,非常适合作为嵌入式操作系统。一个最基本的Linux操作系统应该包括:引导程序、内核与根文件系统三部分。
① 电脑一开机,那些界面是谁显示的? 是 BIOS,它做什么?一些自检,然后从硬盘上读入 windows,并启动它。 类似的,这个 BIOS 对应于嵌入式 Linux 里的 bootloader。 Bootloader 的作用就是去 Flash、SD 卡等设备上读入 Linux 内核,并启动它。
跟我一起来到故事开始的地方,深入 Linux 系统的启动流程,自己编译内核并制作根文件系统,并使用 QEMU 模拟启动。
在第一次学习嵌入式的时候,最好奇的就是什么是嵌入式,对这个概念是比较模糊的,不知道究竟是做什么的,能够有什么作用。
嵌入式系统变得越来越复杂, 它们的软件也反映了这种复杂性的增加。 为了支持新的特性和修复,很有必要让嵌入式系统上的软件 能够以绝对可靠的方式更新。 在基于linux的系统上,我们可以在大多数情况下找到以下元素:
上篇文章,使用BusyBox构建了基础的嵌入式Linux系统的根文件系统,基本的功能可以正常运行,但在这个基础功能上,还要许多地方需要完善。
根文件系统是Linux内核启动之后挂载的第一个文件系统,上篇文章里已经介绍过,如何使用busybox来制作根文件系统。这篇文章介绍根文件系统制作成功后,如何让内核找到文件系统,并完成挂载,进入到系统命令行终端。
目前虽然RISC-V的硬件开发板能够运行Linux的十分难得,从探索RISCV的生态的角度上来看,使用模拟器也是一种非常好的方式。使用QEMU能够很好的模拟RISCV的硬件资源,后期有实际的开发板后将其软件生态移植上去也并不复杂。
最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发环境没有一个深刻的认识,有时候几个简单的命令就可以完成非常复杂的功能,可是我们有没有想过,为什么会有这样的效果?如果没有去追问,只是机械地完成,并且看到实验效果,这样做其实并没有真正的掌握系统移植的本质。
部分硬件设计中需要CPU完成对电路寄存器的配置,为了完成Zedboard对FPGA上部分寄存器的配置功能,可以在PS单元(处理器系统)上运行裸机程序(无操作系统支持)完成和PL单元(FPGA部分)的数据交互功能,此时PS单元更像单片机开发;另一种方法是PS单元运行Linux操作系统,通过驱动程序和应用程序完成对硬件寄存器的读写操作,并且Linux有着完整的网络协议栈支持,后续可拓展性更强,可以更好的发挥ZYNQ这种异构架构芯片的性能。主要分为两部分,分别阐述Zedboard中FPGA和处理器互联总线与硬件设计和Zedboard处理器系统上嵌入式Linux的移植与通过驱动和应用程序简单配置FPGA寄存器的实现。上次介绍了没有操作系统下的驱动和应用程序开发,本文介绍带操作系统的驱动和应用程序开发。
Bootloader的启动过程可以分为单阶段、多阶段两种。通常多阶段的 Bootloader能提供更为复杂的功能以及更好的可移植性。从固态存储设备上启动的 Bootloader大多都是两阶段的启动过程。第一阶段使用汇编来实现,它完成一些依赖于CPU体系结构的初始化,并调用第二阶段的代码;第二阶段则通常使用C语言来实现,这样可以实现更复杂的功能,而且代码会有更好的可读性和可移植性。 一般而言,这两个阶段完成的功能可以如下分类:
答:Length of file is too big : 88564608 > 66183036
一个最小可运行Linux操作系统需要内核镜像bzImage和rootfs,本文整理了其制作、安装过程,调试命令,以及如何添加共享磁盘。
文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构; 即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区
提醒:本文已有自动构建的项目支持,请移步到:再续【从零使用qemu模拟器搭建arm运行环境】
移植内核:2.6.30.4 内核根目录下的.config为当前配置内核的且已经配置好的内核配置。make zImage以此为依据 配置内核的过程: cd linux-2.6.30.4(进入Linux根目录) cp arch/arm/configs/s3c2410_defconfig /linux-2.6.30.4(作为配置参考,考到根目录下) mv s3c2410_defconfig .config(改名为.config) make menuconfig ARCH=arm(ARCH=arm不能少) 配置过程 退出时记得选yes保存为.config(确保该配置是你已经配置且保存的配置,就算不改动也要保存。否则不能生成.config) make zImage ARCH=arm CROSS_COMPILE=arm-linux-(ARCH=arm不可少) 或者 Makefile中定于ARCH=arm CROSS_COMPILE=arm-linux- 1,make s3c2410_defconfig(生成.config) 2,make zImage 即可生成压缩内核印象 uboot引导内核,入口点必须为0x30008000 zImage:go 0x30008000 uImage:bootm 0x30008000 busybox下载地址: http://busybox.net/ linux快速修改文件夹及文件下所有文件与文件夹权限 chmod 777 * -R uboot的tftp下载出现如下错误: TFTP error: 'Permission denied' (0) 改正方法就是给待下载的文件加上可执行(chmod 777 文件)权限 uboot的使用:tftp下载内核,直接用交叉网线连接PC(实际上为虚拟机)和开发板即可 uboot启动之后,输入:printenv 查看 serverip是不是你的虚拟机的ip(终端ifconfig即可查看) ipaddr要和serverip在同一个网段,即ip的前三段必须相同 ethaddr:开发板dm9000的MAC物理地址 netmast:子网掩码:255.255.255.0 serverip,ipaddr,ethaddr,netmast不符合要求的话,可以使用命令设置:(示例) setenv serverip 169.254.209.223 setenv ipaddr 169.254.209.113 setenv netmast 255.255.255.0 setenv ethaddr 00:01:02:03:04:05 saveenv //设置完毕记得保存环境变量 uboot启动内核:uboot版本(2009.08) 条件:uboot的机器码和内核的机器码要一样 uboot部分修改: 机器码: #gedit board/samsung/my2440/my2440.c gd->bd->bi_arch_number = MACH_TYPE_SMDK2440 内核部分:内核版本(2.6.30.4) #gedit arch/arm/mach-s3c2440/mach-smdk2440.c MACHINE_START(SMDK2440, "SMDK2440") #gedit arch/arm/kernel/head.S //在ENTRY(stext)下添加如下代码 ENTRY(stext) mov r0, #0 mov r1, #0x3f0 //上面的MACH_TYPE值1008换成十六进制就是0x3f0 ldr r2, =0x30008000 内核中的nand分区一定要和bootloader中的一致: #gedit arch/arm/plat-s3c24xx/common-smdk.c offsize size uboot : 0x00000000 0x00030000 //192kb param : 0x00030000 0x00040000 //这个环境变量的地址范围配置的CONFIG_ENV_OFFSET一致 kernel: 0x00080000 0x00500000 //5mb root : 0x00580000 0x0c800000 //200mb #gedit uboot/include/cofings/mini2440.h 查看:MTDPART_DEFAULT = " " //默认分区 编译得到内核zImage uImage的制作: 先将u-boot下的tools中的mkimage复制到主机的/usr/local/bin目录下,执行以下命令: mkimage -n 'linux-2.
OpenHarmony OS 2.0 发布时,标准系统只支持 Hi3516DV300 一种硬件平台,而 Android、IOS 均提供了模拟器供开发人员使用。这也可以理解,毕竟华为长期以来都是设备供应商,专长是硬件,在软件开发方面缺少底蕴。鸿蒙应用开发提供了模拟器,但那是真机模拟器,需要接入到华为的开发平台才能使用。
本文介绍了如何编译配置busybox并制作一个最小的根文件系统,包括编译配置、安装过程以及根文件系统的构建方法。
领取专属 10元无门槛券
手把手带您无忧上云