随笔分类 -  《uboot - kernel - fs - 设备树》

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