本篇文章主要讲解嵌入式板卡中Linux系统是如何正确测试、使用的,其中内容包含有U-Boot编译、U-Boot命令和环境变量说明、Linux内核编译、xtra驱动编译、系统信息查询、程序开机自启动说明、NFS使用说明、TFTP使用说明、TFTP + NFS的系统启动测试说明、inux设备驱动说明等,其中案例源码部分公开。
在菜单配置中 , 可以选择裁剪一些内核模块 , 内核越小 , 运行速度越快 ; 上面的内核编译选项 , 如果不清楚细节 , 暂时按照默认配置编译即可 ;
首先我们都知道,Linux内核如果用O0编译,是无法编译过的,Linux的内核编译,要么是O2,要么是Os,这点从Linux的Makefile里面可以看出:
截至目前(2023-04),Android 还未对 eBPF 程序的动态加载做出较好的支持,无论是以 bcc 为代表的带编译器分发方案,还是基于 btf 和 libbpf 的 CO-RE 方案,都在较大程度上离不开 Linux 环境的支持,无法在 Android 系统上很好地运行^WeiShu。
截至目前(2023-04),Android 还未对 eBPF 程序的动态加载做出较好的支持,无论是以 bcc 为代表的带编译器分发方案,还是基于 btf 和 libbpf 的 CO-RE 方案,都在较大程度上离不开 Linux 环境的支持,无法在 Android 系统上很好地运行1。
在某些情况下,我们需要对于内核中的流程进行分析,虽然通过 BPF 的技术可以对于函数传入的参数和返回结果进行展示,但是在流程的调试上还是不如直接 GDB 单步调试来的直接。本文采用的编译方式如下,在一台 16 核 CentOS 7.7 的机器上进行内核源码相关的编译(主要是考虑编译效率),调试则是基于 VirtualBox 的 Ubuntu 20.04 系统中,采用 Qemu + GDB 进行单步调试,网上查看了很多文章,在最终进行单步跟踪的时候,始终不能够在断点处停止,进行过多次尝试和查询文档,最终发现需要在内核启动参数上添加 nokaslr ,本文是对整个搭建过程的总结。
这种方式调试内核需要两台机器,一台用来运行Linux内核,另一台对内核进行调试。一般有以下三种常用的方案,可以根据电脑的性能或资金状况来选择。可以开两个Linux系统的虚拟机;也可以在物理机系统是linux上面装虚拟机,然后虚拟机运行一个linux;再就是买开发板来调试内核。以下是在windows上开两个虚拟机的流程描述。
proc 是一个虚拟文件系统,在Linux 系统中它被挂载于/proc 目录之上。proc 有多个功能 ,这其中包括用户可以通过它访问内核信息或用于排错,这其中一个非常有 用的功能,也是Linux 变得更加特别的功能就是以文本流的形式来访问进程信息。很Linux 命令( 比如 ps 、toPpstree 等) 都需要使用这个文件系统的信息。 maps /proc/[pid]/maps显示进程内存区域映射信息 > cat /proc/1751/maps 00400000-00401000 r-xp 000
本文适用于CentOS 6.4, CentOS 6.5,估计也适用于其他Linux发行版。
前言 Linux内核是Linux操作系统的核心,也是整个Linux功能体现的核心,就如同发动机 在汽车中的重要性。内核主要功能包括进程管理、内存管理、文件管理、设备管理、网络管理等。Linux内核是单内核设计,但却采用了微内核的模块化设计, 支持内核线程以及动态装载内核模块的能力。 Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核 的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统定制一个更高效,更稳定的内核,就需要手动编译Linux内
Linux内核是Linux操作系统的核心,也是整个Linux功能体现的核心,就如同发动机在汽车中的重要性。内核主要功能包括进程管理、内存管理、文件管理、设备管理、网络管理等。Linux内核是单内核设计,但却采用了微内核的模块化设计,支持内核线程以及动态装载内核模块的能力。
题目有点大,其实kernel的启动性能调整和android基本没什么关系,我想应该适用所有使用linux的嵌入式设备。 时间测量 说到性能调整,第一件该干的的事就是看下时间到底消耗在哪里。俗话说的好:知己知彼,百战百胜;过度优化,万恶之首。 因此手头上要有称心如意的时间测试工具,方法。其实我是不太喜欢工具的,工具这东西可遇不可求,而且不如写代码顺手。 1. PRINTK_TIME 在内核编译选项中打开CONFIG_PRINTK_TIME,重新编译内核后,系统启动后就可以看到每一条printk前都有一个时间戳
大侠好,欢迎来到“艮林子”专栏,本次为艮林子首次和大侠见面,新春佳节之际,略备薄礼,不成敬意,给大侠带来“Xilinx Vitis 系列连载”,给大侠提供参考学习的资料,如有不足之处,还请多多指教。
/proc/kallsyms会显示内核中所有的符号,但是这些符号不是都能被其他模块引用的(绝大多数都不能),能被导出的是符号的类型是大写的那些(例如T,U)。
Linux系统启动时使用initramfs (initram file system), initramfs可以在启动早期提供一个用户态环境,借助它可以完成一些内核在启动阶段不易完成的工作。当然initramfs是可选的,Linux中的内核编译选项默认开启initrd。在下面的示例情况中你可能要考虑用initramfs。
开发人员在高性能系统的性能调优过程中,经常会碰到各种背景的噪声干扰, 从而使得收集的数据不够精确。本文主要从CPU 以及Linux操作系统的角度来分析各种噪声的来源以及消除方法。最终的目标是搭建基准平台,在特定的cpu上实现”0”干扰。
Gentoo是一个非常著名的发行版,在Linux高手中非常流行。之前我也是被Gentoo的威名震慑了,所以一直没有尝试安装,最近感觉可以尝试一下了。所以今天来看看如何在虚拟机中安装Gentoo吧。本文参考了Gentoo 安装手册,如果想了解更多关于安装Gentoo的知识,可以直接查看官方文档。
一个最小可运行Linux操作系统需要内核镜像bzImage和rootfs,本文整理了其制作、安装过程,调试命令,以及如何添加共享磁盘。
Linux内核源码文件繁多,搞不清Makefile、Kconfig、.config间的关系,不了解内核编译体系,编译修改内核有问题无从下手,自己写的驱动不知道怎么编进内核,不知道怎么配置内核,这些问题都和Makefile、Kconfig、.config有关,下面简单谈谈Makefile、Kconfig和.config。希望对你有启发。
近日,Linux git中发布一个commit补丁,该补丁对应的漏洞是一个本地提权漏洞CVE-2019-8912,漏洞影响范围较广。根据git中的commit信息可知,该漏洞出现在内核’crypto/af_alg.c’中的af_alg_release函数中,可以通过sockfs_setattr函数触发,漏洞类型是use after free,可以导致本地代码执行进行权限提升。
在这里首先感谢创龙和电子发烧友论坛提供的测试机会,同时感谢创龙厂家和技术给予资源和帮助,我也希望我的困惑和解决方法可以帮助其他使用这块板卡的开发者们少走点弯路。再次感谢电子发烧友论坛 支撑的这个平台生态。 1. 前言 创龙的板卡第一次接触,做工不错,接口也很齐全,说明文档这几天看下来也够用,技术支持回复很及时。这个开发板是10月中收到的,因为通过百度云下载的相关开发资料比较大,整个板卡测试开始的时间就到这几天了。这两个帖子测试过程中,我只使用了开发板和电源。
RV1106 SDK在使用build.sh kernel编译kernel内核的时候,会显示内核编译配置文件,以荣品的rv1106开发板为例:
这篇文章将会简单的介绍如何在Linux系统上面,编译一个5.19的内核,然后在QEMU虚拟机中运行。
要在Cubieboard2上开发四轴飞行器的控制模块,需要编写远程控制的接收端和底层控制模块。换言之需要编写用户层client软件和driver,本人负责单片机模块,此文是跟踪笔记,权当参考和提醒。值得声明的是,由于嵌入式平台的平台相关性很大,相关操作不一定可以完全再现。
首先了解ARMer9开发系统硬件设计上和三星原装SMDK2410之间的区别。让uboot在ARMer9开发系统上跑起来,目前只需要关注如下的硬件区别,解决了下面这个问题,uboot就可以在ARMer9开发系统上正常地从串口输出,进入提示符。很多命令都可以使用,当然有些命令需要做修改。
欣赏一下韦东山老师写的通用 Makefile 源码,韦东山老师的“通用 Makefile” 是参考内核的 Makefile 编写出来的,这个通用的 Makefile 可以在工作中方便使用。
这两天在友善的tiny210的实验板上移植了linux内核,正好和大家分享,同时也算是做个记录吧!首先介绍一下开发环境吧,这个在做移植的时候还是挺重要的。
分别是: 1、Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则; 2、配置文件(config.in):给用户提供配置选择的功能; 3、配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。
许多发行版都为内核提供了模块化或整体式的流量控制(QOS)。自定义的内核可能不会支持这些特性。
经过一个多星期的内核折磨,今天终于可以写下自己移植内核的一些心得,网上有很多博客论坛都有谈到,但是这些又说的方式有些模糊,这里我综合的几个博客在重新说下内核替换编译的步骤、以及如何更新启动项grub。替换linux的内核一共有两种方式,第一种方式是下载官方kernel提供的源码包,进行编译替换;第二种直接下载内核安装包deb,进行升级替换。
在Linux内核中,为了兼容原有的代码,或者符合某种规范,并且还要满足当前精度日益提高的要求,实现了多种与时间相关但用于不同目的的数据结构:
我们交叉编译Linux的时候可能需要添加新的头文件,这个头文件放在哪里。编译应用程序和内核程序不太一样,分别说。
一、initramfs是什么 在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件。当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootfs中是否包含有init文件,如果有则执行它,作为PID为1的第一个进程。这个init进程负责启动系统后续的工作,包括定位、挂载“真正的”根文件系统设备(如果有的话)。如果内核没有在rootfs中找到init文件,则内核会按以前版本的方式定位、挂载根分区,然后执行 /sbin/init程序完成系统的后续初始化工作。 这个压缩过的cpio格式的打包文件就是initramfs。编译2.6版本的linux内核时,编译系统总会创建initramfs,然后把它与编译好的内核连接在一起。内核源代码树中的usr目录就是专门用于构建内核中的initramfs的,其中的initramfs_data.cpio.gz文件就是initramfs。缺省情况下,initramfs是空的,X86架构下的文件大小是134个字节。
原创作品转载请注明出处https://github.com/mengning/linuxkernel/
文章涉及的实验环境和代码可以到这个git repo获取: https://github.com/nevermosby/linux-bpf-learning
最近需要开发一些内核模块,进行探究linux内核的一些特征,现在把一些遇到的比较好的文章和知识点,进行简要记录和备忘;
躲避execve,是在原来的文章的基础上补充一个小思路,分析/proc/目录 是为了下一篇讲解内存中修改函数做准备,要让大家提前知道这回事。
目前大多数CPU都支持浮点运算单元FPU,FPU作为一个单独的协处理器放置在处理器核外,但是对于嵌入式处理器,浮点运算本来就少用,有些嵌入式处理器就会去掉浮点协处理器。
笔者安装新内核就是处于***特殊需求***。笔者所做的工作是需要用到Linux自带的分析工具——***ftrace1***该工具中的一些专门性的工具(姑且叫插件吧)在发行版本中并没有编译到内核中去,所以笔者需要重新编译内核将这些插件勾选上,并安装到自己的系统中。整个过程虽说只有简单几步而已,但是笔者还是走了不少弯路。比如,笔者最开始是不想在自己的机器上直接安装新内核的,毕竟有些环境是笔者肥了九牛二虎之力才部署好的,在加上对添加新内核也是大姑娘出嫁——头一回,万一搞不好就废了。所以开始是在virtualbox上搞的,可是在对内核进行配置时执行 make menuconfig总是提示***curses.h***找不到,在网上扒了半天安装了和***curses.h***相关的所以库都安装也不行,也是够了。 后来,只好在物理机上搞了,结果还是出现了一下奇葩问题,比如删除内核方法中的第二个就是笔者惨痛的经历。当时笔者是安装内核好进入系统所用外设都不可以用,只好进入原来的系统中删除新安装的内核,结果就是方法二中的情况了。后来回想起来应该是没有执行make modules_install导致驱动啥的都没装。
简单来说就是去饭店点菜:Kconfig是菜单,Makefile是做法,.config就是你点的菜
系统调用 跟用户自定义函数一样也是一个函数,不同的是 系统调用 运行在内核态,而用户自定义函数运行在用户态。由于某些指令(如设置时钟、关闭/打开中断和I/O操作等)只能运行在内核态,所以操作系统必须提供一种能够进入内核态的方式,系统调用 就是这样的一种机制。
对用户态进程,利用gdb调试代码是很方便的手段。而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试。
BPF 是 Linux 内核中基于寄存器的虚拟机,可安全、高效和事件驱动的方式执行加载至内核的字节码。与内核模块不同,BPF 程序经过验证以确保它们终止并且不包含任何可能锁定内核的循环。BPF 程序允许调用的内核函数也受到限制,以确保最大的安全性以防止非法的访问。
本次测试板卡是创龙科技旗下,一款基于全志科技T3处理器设计的4核ARM Cortex-A7高性能低功耗国产评估板,每核主频高达1.2GHz。评估板接口资源丰富,引出双路网口、双路CAN、双路USB、双路RS485等通信接口,板载Bluetooth、WIFI、4G(选配)模块,同时引出MIPI LCD、LVDS LCD、TFT LCD、CVBS OUT、CAMERA、LINE IN、H/P OUT等音视频多媒体接口,支持双屏异显、1080P@45fps H.264视频硬件编解码,并支持SATA大容量存储接口。
NXP 会从linux内核官网下载某个版本,然后将其移植到自己的 CPU上,测试成功后就会将其开放给NXP的CPU开发者。开发者下载 NXP 提供的 Linux 内核,然后将其移植到自己的产品上。
笔者受光盘启动WinPE系统修复主机原系统启发,设计并开展了以网络启动传输定制操作系统,实施自动化文件替换,劫持关键系统服务的渗透技术方案研究,实现了在内网环境下预置攻击程序的自主启动。
Linux kernel官网:https://kernel.org/ Active kernel releases(查看EOL信息):https://kernel.org/category/releases.html
OpenHarmony OS 2.0 发布时,标准系统只支持 Hi3516DV300 一种硬件平台,而 Android、IOS 均提供了模拟器供开发人员使用。这也可以理解,毕竟华为长期以来都是设备供应商,专长是硬件,在软件开发方面缺少底蕴。鸿蒙应用开发提供了模拟器,但那是真机模拟器,需要接入到华为的开发平台才能使用。
领取专属 10元无门槛券
手把手带您无忧上云