![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式linux
文章平均质量分 76
毛裤先生_2
这个作者很懒,什么都没留下…
展开
-
imx6ull:rootfs总结
根文件系统首先是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在根文件系统中(以ubuntu为例,这里指的应该就是内核根目录下的vmlinuz,它是一个符号链接指向/boot/vmlinuz-x.xx.x-xx-generic),而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。嵌入式 Linux 并没有将内核代码镜像保存在根文件系统中,而是保存到了其他地方。比如 NAND Flash 的指定存储地址、EMMC 专用分区中。我.原创 2021-03-21 20:20:33 · 554 阅读 · 0 评论 -
x210:九鼎官方linux+QT版bsp的mk脚本分析
#!/bin/sh## Description : Build Qt Script.# Authors : jianjun jiang - jerryjianjun@gmail.com# Version : 0.01# Notes : None#CPU_NUM=$(cat /proc/cpuinfo |grep processor|wc -l)CPU_NUM=$((CPU_NUM+1))SOURCE_DIR=$(cd `dirname $0` ; pwd)RELEASE_.原创 2021-03-11 15:53:10 · 436 阅读 · 0 评论 -
NANDFlash组成图
原创 2021-03-04 17:49:17 · 176 阅读 · 1 评论 -
imx6ull:Linux内核启动流程分析
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ld -EL --defsym _kernel_bss_size=463200 -p --no-undefined -X -T arch/arm/boot/compressed/vmlinux.lds arch/arm/boot/compressed/head.o arch/arm/boot/compressed/pig...原创 2021-03-03 17:55:18 · 850 阅读 · 1 评论 -
imx6ull:kernel(4.1.15版本)总结
Linux内核编译makeimx_v7_defconfigmake menuconfigmakeLinux工程目录分析arch。架构相关目录 block。块设备相关目录 Linux顶层Makefileimx6ull:顶层Makefile分析Linux内核启动流程连接脚本vmlinux.ldslinux的连接脚本为arch/arm/kernel/vmlinux.lds,由arch/arm/kernel/vmlinux.lds.S在make阶段生成..原创 2021-03-03 15:05:17 · 468 阅读 · 1 评论 -
imx6ull:顶层Makefile分析
Linux 的顶层 Makefile 和 uboot 的顶层 Makefile 非常相似,因为 uboot 参考了 Linux,前 602行几乎一样,所以前面部分我们大致看一下就行了。版本号MAKEFLAGS变量MAKEFLAGS += -rR --include-dir=$(CURDIR)命令输出Linux 编译的时候也可以通过“V=1”来输出完整的命令,这个和 uboot 一样实现源码69 ifeq ("$(origin V)", "command line".原创 2021-03-03 14:53:56 · 291 阅读 · 0 评论 -
x210:iNand分区情况
。原创 2021-03-01 11:23:36 · 303 阅读 · 2 评论 -
x210:kernel源码中的重要参数及其文件
机器码在arch/arm/tools/mach-types中的部分内容为smdkv210 MACH_SMDKV210 SMDKV210 2456在arch/arm/tools/Makefile中有## linux/arch/arm/tools/Makefile## Copyright (C) 2001 Russell King#include/generated/mach-types.h: $(.原创 2021-02-26 11:27:29 · 398 阅读 · 0 评论 -
x210:uboot和系统移植扩展--uboot启动第二阶段
全局指针变量gdDECLARE_GLOBAL_DATA_PTR;#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8") //定义了一个全局变量名字叫gd,这个全局变量是一个指针类型,占4字节。用volatile修饰表示可变的,用register修饰表示这个变量要尽量放到寄存器中,后面的asm("r8")是gcc支持的一种语法,意思就是要把gd放到寄存器r8中。typedef struct g.原创 2021-02-23 16:40:35 · 276 阅读 · 0 评论 -
x210:uboot和系统移植扩展--uboot启动第一阶段
从u-boot.lds中ENTRY所指定处可以看出,整个uboot程序的起始就是_start处。不简单的头文件包含(1)#include <config.h>。config.h是在include目录下的,这个文件不是源码中本身存在的文件,而是配置过程中自动生成的文件(参考uboot配置和编译过程详解章节,该文件中的内容为#include <configs/x210_sd.h> )。可见start.S中包含的第一个头文件就是:include/configs/x210_s..原创 2021-02-23 16:25:24 · 275 阅读 · 0 评论 -
x210:uboot和系统移植扩展--shell编程
shell编程(1)可以直接使用linux命令直接执行 反引号括起来执行,得到这个命令的返回值(结果值)(2)变量定义和引用shell是弱类型语言(语言中的变量如果有明确的类型则属于强类型语言;变量没有明确类型就是弱类型语言),和C语言不同。在shell编程中定义变量不需要制定类型,也没有类型这个概念。 变量定义时可以初始化,使用=进行初始化赋值。在shell中赋值的=两边是不能有空格的。shell对语法非常在意,很多地方空格都是必须没有或者必须有。 shell中并不刻意区分变量的定义.原创 2021-02-23 16:20:47 · 141 阅读 · 0 评论 -
x210:uboot和系统移植扩展--uboot的常用命令和环境变量
uboot的常用命令(1)printenv/print打印出系统中所有的环境变量 例:print(2)setenv/set设置(添加/更改/删除)环境变量 要彻底改变环境变量的值,还需要在执行该命令后执行save命令 例:set name value 添加/更改一个环境变量name,它的值为value 例:set name 删除环境变量name(3)saveenv/save保存所有的环境变量 例...原创 2021-02-23 16:18:30 · 212 阅读 · 0 评论 -
x210:uboot和系统移植扩展--内核启动之C语言阶段
start_kernel//init/main.casmlinkage void __init start_kernel(void){ char * command_line; extern struct kernel_param __start___param[], __stop___param[]; /* *当只有一个CPU的时候这个函数就什么都不做, *但是如果有多个CPU的时候那么它就 *返回在启动的时候的那个CPU的号 */ .原创 2021-02-23 16:15:01 · 208 阅读 · 0 评论 -
x210:uboot和系统移植扩展--内核启动之汇编初始化阶段
链接脚本分析kernel的连接脚本并不是直接提供的,而是提供了一个汇编文件vmlinux.lds.S,然后在编译的时候再去编译这个汇编文件得到真正的链接脚本vmlinux.lds。 vmlinux.lds.S在arch/arm/kernel/目录下。 为什么linux kernel不直接提供vmlinux.lds而要提供一个vmlinux.lds.S然后在编译时才去动态生成vmlinux.lds呢?猜测:.lds文件中只能写死,不能用条件编译。但是我们在kernel中链接脚本确实有条件编译的需求(.原创 2021-02-23 16:14:38 · 216 阅读 · 0 评论 -
x210:uboot和系统移植扩展--内核启动之解压缩阶段
zImage的生成过程依据arch/arm/boot/vmlinux.lds.S生成arch/arm/boot/vmlinux.lds依据arch/arm/boot/compressed/vmlinux.lds.in等生成arch/arm/boot/compressed/vmlinux.lds$(obj)/vmlinux.lds: $(obj)/vmlinux.lds.in arch/arm/boot/Makefile .config @sed "$(SEDFLAGS)" ..原创 2021-02-20 18:13:49 · 253 阅读 · 0 评论 -
imx6ull:bootcmd和bootargs环境变量
bootcmd 和 bootagrs 是采用类似 shell 脚本语言编写的,里面有很多的变量引用,这些变量其实都是环境变量,有很多是NXP自己定义的。文件mx6ullevk.h中的宏CONFIG_EXTRA_ENV_SETTINGS 保存着这些环境变量的默认值bootcmduboot 倒计时结束以后就会执行 bootcmd 中的命令NXP官方默认值#define CONFIG_BOOTCOMMAND \ "run findfdt;" \ "mmc dev $...原创 2021-02-19 16:04:30 · 674 阅读 · 0 评论 -
imx6ull:bootz启动linux内核
images全局变量不管是 bootz 还是 bootm 命令,在启动 Linux 内核的时候都会用到一个重要的全局变量images images 是 bootm_headers_t 类型的全局变量 /* * Legacy and FIT format headers used by do_bootm() and do_bootm_<os>() * routines. */typedef struct bootm_headers { /* * Legacy os ima.原创 2021-02-19 16:01:12 · 380 阅读 · 0 评论 -
imx6ull:uboot链接脚本u-boot.lds详解
如果没有编译过 uboot 的话链接脚本为 arch/arm/cpu/u-boot.lds。但是这个不是最终使用的链接脚本,最终的链接脚本是在这个链接脚本的基础上生成的。编译一下 uboot,编译完成以后就会在 uboot 根目录下生成 u-boot.lds文件1 OUTPUT_FORMAT( ("elf32-littlearm", , "elf32-littlearm", , "elf32-littlearm") )2 OUTPUT_ARCH(arm)3 ENTRY(_start)4 S.原创 2021-02-19 15:58:38 · 384 阅读 · 0 评论 -
imx6ull:uboot命令使用
uboot 命令中的数字都是十六进制的!不是十进制的!信息查询命令bdinfo、version环境变量操作命令printenv、setenv、saveenv内存操作命令mdnmmmmwcpcmp网络操作命令pingdhcpnfstftpEMMC和 SD 卡操作命令SD 卡(mmc 0)或者 EMMC (mmc 1)的前两个块(扇区),里面保存着分区表I.MX6U-A...原创 2021-02-19 15:56:51 · 500 阅读 · 0 评论 -
imx6ull:uboot启动流程详解
原创 2021-02-19 15:52:10 · 360 阅读 · 0 评论 -
imx6ull:uboot的make过程分析
make时使用的是默认目标,主Makefile 中的默认目标如下:128 # That's our default target when none is given on the command line129 PHONY := _all130 _all:如果KBUILD_EXTMOD为空的话_all依赖于all。这里不编译模块,所以KBUILD_EXTMOD 肯定为空,目标_all 又依赖于 all:194 # If building an external module we d.原创 2021-02-18 15:29:35 · 329 阅读 · 0 评论 -
imx6ull:uboot的Makefile.build脚本分析
scripts_basic目标对应的命令scripts_basic 目标对应的命令为:@make -f ./scripts/Makefile.build obj=scripts/basic8 # Modified for U-Boot9 prefix := tpl10 src := $(patsubst $(prefix)/%,%,$(obj))11 ifeq ($(obj),$(src))12 prefix := spl13 src := $(patsubst $(prefix)..原创 2021-02-18 11:59:03 · 352 阅读 · 0 评论 -
imx6ull:uboot的make xxx_defconfig 过程分析
相关代码414 # To make sure we do not include .config for any of the *configtargets415 # catch them early, and hand them over to scripts/kconfig/Makefile416 # It is allowed to specify more targets when calling make,including417 # mixing *config targets.原创 2021-02-08 22:59:06 · 361 阅读 · 0 评论 -
imx6ull:uboot根目录config.mk分析
1 #2 # (C) Copyright 2000-20133 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.4 #5 # SPDX-License-Identifier: GPL-2.0+6 #7#########################################################################89 # This file is included from ./Makefi..原创 2021-02-08 21:19:38 · 339 阅读 · 0 评论 -
imx6ull:uboot顶层Makefile分析
版本号MAKEFLAGES变量20 MAKEFLAGS += -rR --include-dir=$(CURDIR)Makefile有两个特殊的变量:“SHELL”和“MAKEFLAGS”,这两个变量除非使用“unexport”声明,否则的话在整个make的执行过程中,它们的值始终自动的传递给子make。 在 Makefile 中使用“make”命令来执行其他的 Makefile文件 上述代码使用“+=”来给变量 MAKEFLAGS 追加了一些值,“-rR”表示禁止使用内置的隐含规则.原创 2021-02-07 22:21:55 · 361 阅读 · 0 评论 -
x210:uboot和系统移植扩展--tag方式传参
tag方式传参struct tag { struct tag_header hdr; union { struct tag_core core; struct tag_mem32 mem; struct tag_videotext videotext; struct tag_ramdisk ram原创 2021-02-02 15:34:05 · 202 阅读 · 0 评论 -
imx6ull:uboot(2016.03版本)总结
bootz启动linux内核images全局变量不管是 bootz 还是 bootm 命令,在启动 Linux 内核的时候都会用到一个重要的全局变量images images 是 bootm_headers_t 类型的全局变量do_bootz函数对应于bootz命令,用于启动zImage镜像文件 调用bootz_start函数 关闭中断 设置 images.os.os 为 IH_OS_LINUX,也就是设置系统镜像为 Linux,表示我们要启动的是 Linux 系统!后面会..原创 2021-02-01 21:34:34 · 499 阅读 · 0 评论 -
uboot和系统移植扩展--网卡驱动移植
网卡芯片与开发板的连接方式(1)SoC的SROM bank(SROM就是SRAM/ROM)和网卡芯片的CS引脚。SoC的SROMController其实就是SoC提供的对外总线式连接SRAM/ROM的接口。如果SoC要外部外接一些SRAM/ROM类的存储芯片(或者伪装成SROM接口的芯片,譬如网卡芯片)就要通过SROM Controller来连接。网卡接在SROM中好处就是网卡芯片好像一个存储芯片一样被扩展在SoC的一个地址空间中,主机SoC可以直接用一个地址来访问网卡芯片内部寄存器。(2)网卡芯.原创 2021-01-18 19:09:49 · 756 阅读 · 1 评论 -
关于异常向量表的一些理解
异常发生后pc会被强制赋值为对应的异常向量表地址,并且由于异常向量表中每个向量只能占用4个字节,所以异常向量表中的每一项存储的应该是跳转指令。类似于ldr pc, =irq /*将irq的值赋给pc*/这里irq就是我们的异常处理函数的首地址,也就是函数名。我们只需要实现irq函数的函数体即可irq: get_irq_stack irq_save_user_regs bl do_irq irq_restore_user_regs大部分时候我们会看到如下的书写方式...原创 2020-12-25 11:47:39 · 2082 阅读 · 1 评论 -
ARM裸机-S5PV210简析
源文链接:https://blog.csdn.net/chenlb200/article/details/52750921Cortex-A8架构ARMv7架构指令集ARMv7架构是在ARMv6架构的基础上诞生的。该架构采用了Thumb-2技术,Thumb-2技术是在ARM的Thumb代码压缩技术的基础上发展起来的,并且保持了对现存ARM解决方案的完整的代码兼容性。Thumb-2技术比纯32位代码少使用 31%的内存,减小了系统开销。同时能够提供比已有的基于Thumb技术的解决方案高出38转载 2020-12-22 11:28:43 · 840 阅读 · 0 评论 -
关于bss段的一些思考
bss段是用来存放:未初始化的全局变量未初始化的静态局部变量初始化为0的全局变量(部分编译器会将它放到data段)初始化为0的静态局部变量(部分编译器会将它放到data段)bss段在elf格式的可执行文件中是不占用空间的,只会记录它的大小等一些标记性数据,具体细节不讨论。操作系统下的应用程序需要在main函数执行前先执行一段引导代码,这段代码中包含了清零bss段等准备工作,这里具体细节不是很清楚,猜测部分是由操作系统完成,部分是编译器提供的代码在链接时加入到程序中。.原创 2020-12-21 11:54:16 · 577 阅读 · 0 评论 -
ARM裸机全集扩展--SRAM内部重定位代码示例
注:此代码来自朱老师ARM裸机课程中,这里贴出来方便查看Makefileled.bin: start.o led.o arm-linux-ld -Tlink.lds -o led.elf $^ arm-linux-objcopy -O binary led.elf led.bin arm-linux-objdump -D led.elf > led_elf.dis gcc mkv210_image.c -o mkx210 ./mkx210 led.bin 210.bin %.o原创 2020-12-09 16:47:44 · 308 阅读 · 0 评论 -
ARM裸机全集扩展--mkv210_image.c文件分析
/* * mkv210_image.c的主要作用就是由usb启动时使用的.bin文件制作得到由sd卡启动的镜像.bin文件 * * 本文件来自于友善之臂的裸机教程,据友善之臂的文档中讲述,本文件是一个热心网友提供,在此表示感谢。 *//* 在BL0阶段,Irom内固化的代码读取nandflash或SD卡前16K的内容, * 并比对前16字节中的校验和是否正确,正确则继续,错误则停止。 */#include <stdio.h>#include <string.h>.原创 2020-12-07 16:30:09 · 122 阅读 · 0 评论 -
linux驱动开发扩展--ramdisk驱动案例分析
#include <linux/module.h>#include <linux/slab.h>#include <linux/errno.h>#include <linux/interrupt.h>#include <linux/mm.h>#include <linux/fs.h>#include <linux/kernel.h>#include <linux/timer.h>#includ..原创 2020-11-30 18:11:15 · 233 阅读 · 0 评论 -
linux驱动开发扩展--i2c触摸屏驱动将数据写到驱动中
static int __init ft5x06_ts_init(void){ int res; printk("Initial ft5x06 Touch Driver\n"); ft5x06_power_on(); res = platform_device_register(&ft5x06_ts_device); if(res) { printk("failed to register platform device\n"); } res = platf..原创 2020-11-27 16:44:52 · 154 阅读 · 0 评论 -
linux驱动开发扩展--i2c触摸屏驱动分析
drivers/input/touchscreen/gslx680.c(该文件需要自己添加)static int __init gsl_ts_init(void){ int ret; print_info("==gsl_ts_init==\n"); ret = i2c_add_driver(&gsl_ts_driver); print_info("ret=%d\n",ret); return ret;}static void __exit gsl_ts_exit(v.原创 2020-11-26 11:49:09 · 517 阅读 · 0 评论 -
linux驱动开发扩展--i2c控制器adapter部分分析
drivers/i2c/busses/i2c-s3c2410.cstatic int __init i2c_adap_s3c_init(void){ return platform_driver_register(&s3c24xx_i2c_driver);}subsys_initcall(i2c_adap_s3c_init);static void __exit i2c_adap_s3c_exit(void){ platform_driver_unregister(&am.原创 2020-11-25 17:40:54 · 248 阅读 · 0 评论 -
linux驱动开发扩展--i2c子系统核心部分分析
drivers/i2c/i2c-core.cpostcore_initcall(i2c_init);module_exit(i2c_exit);static int __init i2c_init(void){ int retval; retval = bus_register(&i2c_bus_type);//注册i2c类型的bus if (retval) return retval;#ifdef CONFIG_I2C_COMPAT i2c_adapter_c.原创 2020-11-25 14:14:55 · 166 阅读 · 0 评论 -
linux驱动开发扩展--tasklet和workqueue应用实例
tasklet#include <linux/input.h> #include <linux/module.h> #include <linux/init.h>#include <asm/irq.h> #include <asm/io.h>#include <mach/irqs.h> // arch/arm/mach-s5pv210/include/mach/irqs.h#include <linux..原创 2020-11-24 09:32:27 · 145 阅读 · 0 评论 -
linux驱动开发扩展--中断方式实现按键驱动
参考:documentation/input/input-programming.txtrequest_irqstatic inline int __must_check request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev);功能:申请中断参数:irq。中断号,这里的中断号指的并不是芯片数据手册中的中断号,而是linux内核对所...原创 2020-11-20 14:40:22 · 161 阅读 · 0 评论