随笔分类 -  Linux内核

编译及剪裁内核,适配arm平台
摘要:#梦开始的地方 X86硬件时钟 首先我们需要了解一下,目前有哪些时钟 PIT pit是最古老的pc时钟设备。Intel 8253/8254 PIT是具有3个16位计数器通道的可编程计数/定时器芯片,晶振频率为1.193182MHz。 HPET PET(High Precision Event Tim 阅读全文
posted @ 2023-03-03 17:13 Edver 阅读(918) 评论(0) 推荐(0) 编辑
摘要:简介: 上一章描述了库文件存在静态和动态的区别,在现代操作系统中由于很多基础库已经存在且复用程度较高,所以使用动态链接库的场景较多。在大多数程序中使用了动态链接技术,使得编译出来的程序占用空间变小,一些公共的库函数如glibc在可执行文件中并没有对应的函数实现。但是动态绑定导致了程序运行时加载时间较 阅读全文
posted @ 2020-10-05 11:15 Edver 阅读(967) 评论(0) 推荐(0) 编辑
摘要:简介: 在程序编写的时候我们会依赖很多底层的实现(除非单纯操作简单的硬件如单片机点灯),所以不可能永远从零开始书写,因此不可避免的会使用到很多库文件,那么什么是库文件。 一:什么是库 库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此 阅读全文
posted @ 2020-10-05 11:13 Edver 阅读(977) 评论(0) 推荐(0) 编辑
摘要:二、 加载--可执行文件放入内存 通过前一章可以知道一个程序是如何从我们编写的代码变成一个可以执行的文件的。但是此时它仍是放在磁盘上的一个文件,并不是我们通常理解的程序--在内存上运行的一段代码。 程序运行在内存上,所以首先我们需要了解虚拟内存的一些基本知识,然后我们以linux上在shell会话中 阅读全文
posted @ 2020-09-30 08:30 Edver 阅读(2538) 评论(0) 推荐(0) 编辑
摘要:目录: 搭建linux调试环境 (一)-- qemu环境搭建vexpress开发平台 搭建linux调试环境 (二)-- 基于u-boot搭建qemu的vexpress环境 搭建linux调试环境 (三)-- vexpress添加系统调用 一:系统调用的基本原理 系统调用其实就是函数调用,只不过调用 阅读全文
posted @ 2020-08-16 18:11 Edver 阅读(566) 评论(0) 推荐(0) 编辑
摘要:简介: 本章基于linux主要讲解l编辑好的hello.c文件如何从一个存储介质上的文件编译为可执行程序,以及加载到内存执行的过程。 第一节讲述文本方式的代码及在介质上的存储方式(ELF文件),以及关于文本如何编译成可执行文件的简单介绍。 第二节讲述可执行文件如何加载到内存中,涉及虚拟内存和文件如何 阅读全文
posted @ 2020-08-06 23:48 Edver 阅读(1460) 评论(0) 推荐(1) 编辑
摘要:目录: 搭建linux调试环境 (一)-- qemu环境搭建vexpress开发平台 搭建linux调试环境 (二)-- 基于u-boot搭建qemu的vexpress环境 搭建linux调试环境 (三)-- vexpress添加系统调用 上一篇文章搭建了基于zImage的qemu环境,基本的环境配 阅读全文
posted @ 2019-12-30 01:04 Edver 阅读(1468) 评论(0) 推荐(1) 编辑
摘要:参考: https://biscuitos.github.io/blog/ARM-BOOT/ zImage 重定位之后实践 zImage 重定位之后,ARM 将 pc 指针指向了重定位 zImage restart 处继续执行,执行 代码如下: restart: adr r0, LC0 ldmia 阅读全文
posted @ 2019-12-09 16:05 Edver 阅读(1047) 评论(0) 推荐(0) 编辑
摘要:一: arm linux 内核生成过程 1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息、符号表的最初的内核,大小约23MB; 命令:arm-linux-gnu-ld -o vmlinux -T 阅读全文
posted @ 2019-12-09 15:56 Edver 阅读(3661) 评论(0) 推荐(0) 编辑
摘要:UBOOT官网下载地址:http://ftp.denx.de/pub/u-boot/ 很详细的UBOOT解释: https://www.crifan.com/files/doc/docbook/uboot_starts_analysis/release/html/uboot_starts_analy 阅读全文
posted @ 2019-07-26 21:35 Edver 阅读(1496) 评论(0) 推荐(0) 编辑
摘要:目录 1. 设备树(Device Tree)基本概念及作用 2. 设备树的组成和使用 2.1. DTS和DTSI 2.2. DTC 2.3. DTB 2.4. Bootloader 3. 设备树中dts、dtsi文件的基本语法 3.1. chosen node 3.2. aliases node 3 阅读全文
posted @ 2018-05-20 15:17 Edver 阅读(19183) 评论(0) 推荐(2) 编辑
摘要:一.背景 a) 在进行JZ2440的一个小demo开发的时候,使用自己编译的内核(3.4.2)及lcd模块进行加载时,insmod会提示加载失败因为内核版本不匹配(提示当前内核版本为空),并且显示模块的内核版本为空。 b) 尝试过修改编译的Makefile文件的内核目录,及重新编译内核及模块并重新烧 阅读全文
posted @ 2018-02-05 23:39 Edver 阅读(3032) 评论(0) 推荐(1) 编辑
摘要:前言 在早期的systemV模式下编写Damon程序略显麻烦,基本思路为两次fork使子进程脱离父进程并脱离原会话成为init进程接管的一个进程来达到Damon的目的 最近的一些linux distribution开始采用systemd作为sysv init和upstart的替代,如果我们想让自己的 阅读全文
posted @ 2018-02-05 22:02 Edver 阅读(410) 评论(0) 推荐(0) 编辑
摘要:在Linux3.x版本后,arch/arm/plat-xxx和arch/arm/mach-xxx中,描述板级细节的代码(比如platform_device、i2c_board_info等)被大量取消,取而代之的是设备树,其目录位于arch/arm/boot/dts 1.设备树的组成 1个dts文件+ 阅读全文
posted @ 2017-10-29 10:55 Edver 阅读(625) 评论(0) 推荐(0) 编辑
摘要:简介: platform总线是一种虚拟的总线,相应的设备则为platform_device,而驱动则为platform_driver。Linux 2.6的设备驱动模型中,把I2C、RTC、LCD等都归纳为platform_device。 总线将设备和驱动绑定,在系统每注册一个设备的时候,会寻找与之匹 阅读全文
posted @ 2017-10-29 10:54 Edver 阅读(1461) 评论(0) 推荐(0) 编辑
摘要:在工作和日常的编程中时常需要确定文件的大小,一些基本的查看方式在此做一个总结。 一. linux shell环境下 df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。 du可以查看文件及文件夹的大小。 两者配合使用,非常有效。比如用df查看哪个一级目录过大,然后用df查看 阅读全文
posted @ 2017-10-29 10:45 Edver 阅读(2840) 评论(0) 推荐(0) 编辑
摘要:1. dd(剪切文件大小时使用并记录) dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2 参数注释: if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input fil 阅读全文
posted @ 2017-09-04 17:32 Edver 阅读(262) 评论(0) 推荐(0) 编辑
摘要:1.中断概念 中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序。Linux中通常分为外部中断(又叫硬件中断)和内部中断(又叫异常)。 在实地址模式中, 阅读全文
posted @ 2017-07-30 22:07 Edver 阅读(19995) 评论(0) 推荐(2) 编辑
摘要:1.内核调试手段 1.printk打印内核状态 2.产生opps时使用GDB查看调用栈 2.内核空间和用户空间区别,通信方式有哪些? Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G。Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从 阅读全文
posted @ 2017-07-29 23:07 Edver 阅读(460) 评论(0) 推荐(0) 编辑
摘要:#include <stdio.h> #include <pthread.h> struct char_print_params { char character; int count; }; void *char_print(void *parameters) { struct char_prin 阅读全文
posted @ 2017-07-12 11:14 Edver 阅读(403) 评论(0) 推荐(0) 编辑