随笔分类 - 《uboot - kernel - fs - 设备树》
摘要:《STM32MP157嵌入式Linux驱动开发指南》第二十五章 pinctrl和gpio子系统实验 - 知乎 (zhihu.com)
阅读全文
摘要:正常情况下,我们需要一个gpio口控制灯,我们认为灯打开就是active状态。对于一个程序员来说,我们可以封装一个函数,写1就是打开灯,写0就是关灯。 但是对于硬件来说,变化的是gpio口的电平状态。如果gpio输出高电平灯亮,那么这就是高有效。如果硬件设计是gpio输出低电平灯亮,那么就是低有效。
阅读全文
摘要:1.没有引入设备树时中断 在老的内核中断是在完全由所谓的板级支持包中指定的,同时相关的寄存器地址这些也都是在代码中写死的。 这种代码没法在多个SOC上通用,这个就导致大量的重复代码出现。 在2.6.35.7内核中,SMDKV210单板是这样描述的 MACHINE_START(SMDKV210, "S
阅读全文
摘要:针对重复的代码问题,如果不同的SOC使用了相同的IP block(例如I2C controller),那么这个driver的code要从各个arch/arm/mach-xxx中独立出来,变成一个通用的模块供各个SOC specific的模块使用。移动到哪个目录呢?对于I2C或者USB OTG而言,这
阅读全文
摘要:内核中开放出来的接口函数的声明大多在include/linux/下面,关于设备树的都是以ofxxx.h形式命名 这里介绍一下各个头文件中是关于那些的函数 of_fdt.h // dtb文件的相关操作函数, 我们一般用不到, 因为dtb文件在内核中已经被转换为device_node树(它更易于使用)
阅读全文
摘要:我们知道了在内核启动时,是把dtb文件所在的内存块保留了下来。 而这个内存块是可以在内核中查看的。 查看的位置在sys文件系统中。 因为dtb文件是二进制文件,所以要用hexdump命令来查看。 hexdump -C /sys/firmware/fdt 部分信息如下,和我们传给内核的dtb文件里的完
阅读全文
摘要:4.x的内核都是已经支持设备树的,所以platform bus也是做了一些调整。 主要是在匹配函数里面的支持设备树。 struct bus_type platform_bus_type = { .name = "platform", .dev_groups = platform_dev_groups
阅读全文
摘要:1.哪些device node可以转换成platform device 首先,要说明的是设备树最初是为了解决大量重复的platform_device在mach-xx目录下,但在实现的过程中,设备树体现的是一个电路板的信息,添加了bootargs,memory,clock,interrupt等非pla
阅读全文
摘要:1.内核中对一个设备节点的表示 struct device_node { const char *name; //节点的名字 const char *type; //device_type属性的值 phandle phandle; //对应该节点的phandle属性 const char *full
阅读全文
摘要:1.设备树的引入 在没有引入设备树之前,在内核中充斥的很多板卡硬件描述代码。而且很多都是重复的。对于修改以及维护都很麻烦。因此引入了设备树。 https://www.cnblogs.com/downey-blog/p/10486568.html 2.什么是设备树 Device Tree是一种描述硬件
阅读全文
摘要:1.设备树 以上一节为例子,一个leddrv.c驱动可以对应board_A.c、board_B.c、board_C.c等一系列的单板。一旦修改了代码,就要重新编译加载。而且随着板卡的增多,这么.c文件也会越来越多。 因此,linux就开始引入设备树。设备树其实是一个配置文件,里面定义了硬件相关的资源
阅读全文
摘要:1、MAC控制器、网卡、PHY、MDIO、mii、gmii、rgmii概念扫盲 网卡在功能上包含OSI模型的两个层,数据链路层和物理层。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。数据链路层则提供寻址机构、数据帧的构建、数据差错
阅读全文
摘要:1.配置编译busybox busybox的官方网站是:http://www.busybox.net/ 打开busybox中的INSTALL文档,里面详细说明了如何配置编译busybox。 The BusyBox build process is similar to the Linux kerne
阅读全文
摘要:https://blog.csdn.net/davion_zhang/article/details/52233043
阅读全文
摘要:1.busybox 平时我们在开发板中输入ls、cp、mv等命令,都是在/bin文件中。而通过ls -l就可以发现 这些命令都是放在busybox中的。并且在内核启动后,通过ps命令,可以看到有一个init进程正在运行。 因此就先来分析一下,这个第一个运行的进程init。 2.init进程分析 因为
阅读全文
摘要:1.init_post启动应用程序 在内核经过一系列得初始化以及挂载了根文件系统后,最后就是运行第一个应用程序。 打开dev/console控制台设备(串口0),使用户能输入信息, /dev/console即成为kernel_init进程的标准输入源(文件描述符0),打开失败则打印Warning:
阅读全文
摘要:1.内核启动参数 当uboot启动内核时,调用的是armlinux.c中的theKernel (0, bd->bi_arch_number, bd->bi_boot_params),传入了两个参数。 bi_arch_number:机器码(以2410为例,可以通过sourceinsight中的全局搜索
阅读全文
摘要:1.内核的配置和编译 2.了解内核的配置过程和编译过程 在内核的配置过程中,会生成文件.config。 以网卡DM9000为例: 在.config中可以找到”CONFIG_DM9000=y“,这表示这个模块会被编译进内核。“CONFIG_DM9000=m”,这表示模块会被编译成.ko文件,可以动态的
阅读全文
摘要:1.内核启动bootcmd 内核启动的两个条件: 1.从Flash中读出内核 2.bootm命令 在uboot界面,通过prinenv可以看到bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0 nand read.jffs2 0x30
阅读全文
摘要:以上是smdk2410中的u-boot.lds。 U-boot中那段relocate代码就是通过adr实现当前程序是在RAM中还是flash中: relocate:/* 把U-Boot重新定位到RAM*/ adr r0, _start /* r0是代码的当前位置*/ /*adr伪指令,汇编器自动通过
阅读全文