![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux移植
文章平均质量分 90
linux移植
Tree-gg
半仙卖苹果
展开
-
17_Linux根文件简介与Busybox构建文件系统
所以要设置的nfs服务器目录中创建一个名为rootfs的子目录(名字大家可以随意起,为了方便就用了rootfs),比如我的电脑中"/home/zuozhongkai/linux/nfs"就是我设置的NFS服务器目录,使用如下命令创建名为 rootfs的子目录。盒子是用来放东西的,忙碌的是因为它要提供根文件系统所需的文件,所以忙碌。系统启动以后此目录作为sysfs文件系统的挂载点, sysfs是一个类似于proc文件系统的特殊文件系统, sysfs也是基于ram的文件系统,也就是说它也没有实际的存储设备。原创 2023-06-04 15:49:33 · 759 阅读 · 0 评论 -
16_Linux内核启动流程
Linux内核启动流程就分析到这里, Linux内核最终是需要和根文件系统打交道的,需要挂载根文件系统,并且执行根文件系统中的init程序,以此来进去用户态。第963-966行,如果ramdisk_execute_command和execute_command都为空,那么就依次查找"/sbin/init"、"/etc/init"、"/bin/init"和"/bin/sh",这四个相当于备用init程序,如果这四个也不存在。接下来重点看一下init进程, kernel_init就是init进程的进程函数。原创 2023-06-02 23:16:42 · 457 阅读 · 1 评论 -
15_Linux工程目录与顶层Makefile
而 vmlinux-deps=$(KBUILD_LDS)$(KBUILD_VMLINUX_INIT)$(KBUILD_VMLINUX_MAIN), KBUILD_LDS是链接脚本,这里不考虑,剩下的KBUILD-VMLINUX-INIT和KBUILD-VMLINUX-MAIN就是各个子目录下的 built-in.o、a等文件。最终 vmlinux-deps 的值如下。但是链接是需要链接脚本的,vmlinux的依赖arch/arm/kernel/vmlinux.lds就是整个Linux的链接脚本。原创 2023-05-27 23:05:21 · 1036 阅读 · 0 评论 -
14_Uboot图形化配置
Kconfig语法简介U-Boot图形化配置体验uboot或Linux内核可以通过输入"make menuconfig"来打开图形化配置界面menuconfig是一套图形化的配置工具,需要ncurses库支持。ncurses库提供了一系列的API函数供调用者生成基于文本的图形界面因此需要先在Ubuntu中安装ncurses库命令如下menuconfig重点会用到两个文件config和Kconfig,.config文件前面已经说了这个文件保存着uboot的配置项。原创 2023-05-25 21:01:38 · 698 阅读 · 0 评论 -
13_Uboot移植
大功基本上告成,还差最后一步, uboot中的LAN8720A驱动有点问题,打开文件drivers/net/phy/phy.c,找到函数genphy_update_link,这是个通用PHY驱动函数,此函数用于更新PHY的连接状态和速度。第335行为ENET1的PHY地址,默认是0X2,第339行为ENET2的PHY地址,默认为0x1。第29-39行,设置DRAM 的大小,宏PHYS_SDRAM_SIZE就是板子上DRAM 的大小,如果用的NXP官方的9X9 EVK开发板的话DRAM大小就为256MB。原创 2023-05-24 22:43:53 · 1108 阅读 · 0 评论 -
12_Uboot启动流程_4
boot_selected_os函数在调用do_bootm_linux的时候会将flag设置为BOOTM。第639行,调用函数do bootm states来执行不同的BOOT阶段,这里要执行的BOOT阶段有: BOOTM_STATE_OS_PREP 、BOOTM_STATE_OS_FAKE_GO和BOOTM_STATE_OS_GO。在do_bootz函数中会用到BOOTM_STATE_OS_PREP、BOOTM_STATE_OS_FAKE_GO和BOOTM_STATE_OS_GO这三个BOOT状态。原创 2023-05-09 22:27:22 · 539 阅读 · 0 评论 -
11_Uboot启动流程_3
run_main_loop函数详解run_main_loop函数详解uboot启动以后会进入3秒倒计时如果在3秒倒计时结束之前按下按下回车键那么就,会进入uboot的命令模式,如果倒计时结束以后都没有按下回车键,那么就会自动启动Linux内核,这个功能就是由run_main_loop函数来完成的。run_main_loop函数定义在文件common/board r.c中函数内容如下:第759行和第760行是个死循环, "for(;;原创 2023-05-09 21:34:11 · 1221 阅读 · 0 评论 -
10_Uboot启动流程_2
重新设置环境(sp和 gd)、获取 gd->start_addr_sp的值赋给sp,在函数 board_init_f中会初始化gd的所有成员变量,其中gd->start_addr_sp-0X9EF44E90,所以这里相当于设置sp-gd->start_addr_sp-0X9EF44E90。第4行,initf_console_record,如果定义了宏CONFIG_CONSOLE-RECORD和宏CONFIG_SYS_MALLOC_F_LEN的话此函数就会调用函数console_record_init。原创 2023-05-07 19:10:39 · 948 阅读 · 0 评论 -
09_Uboot启动流程_1
链接脚本u-boot.lds详解要分析uboot的启动流程,首先要找到“入口”,找到第一行程序在哪里。程序的链接是由链接脚本来决定的,所以通过链接脚本可以找到程序的入口。如果没有编译过uboot的话链接脚本为arch/arm/cpu/u-boot.lds。但是这个不是最终使用的链接脚本,最终的链接脚本是在这个链接脚本的基础上生成的。编译一下 uboot,编译完成以后就会在 uboot 根目录下生成 u-boot.lds文件如图所示打开u-boot.lds内容如下。原创 2023-05-07 16:02:28 · 511 阅读 · 0 评论 -
08_Uboot顶层Makefile分析_make过程
的描述,根据描述,在一些先决条件比目标新的时候,或者命令行 有改变的时候,if_changed就会执行一些命令。里面的配置参数的含义,这些参数其实都是变量,后面跟着变量值,会在 顶层 Makefile。文件的时候,需要使用此选项。产生可重定向的输出,比如,产生一个输出文件它可再次作为‘ld。’的输入,这经常被叫做“部分链接”,当我们需要将几个小的。函数引用的变量比较多,也比较绕,我们只需要知道它可以从。编译了,因为没有指明目标,所以会使用默认目标,主。”,没有找到,说明条件不成立。原创 2023-05-04 22:27:11 · 506 阅读 · 0 评论 -
07_Uboot顶层Makefile分析_make xxx_defconfig
MAKECMDGOALS是make的一个环境变量,这个变量会保存你所指定的终极目标列表,比如执行"make mx6ull_alientek_emme_defconfig",那么MAKECMDGOALS就为 mx6ull_alientek_emme_defconfig。只有 scripts_basic是有效的。第440行将MAKECMDGOALS中不符合"config"和“%config"的部分过滤掉,如果剩下的部分不为空条件就成立,很明显此处条件成立,变量config-targets=1。原创 2023-05-04 21:49:19 · 784 阅读 · 0 评论 -
06_Uboot顶层Makefile分析_前期所做内容
从图可以看出第一个单词是"xrRs",将$(filter %s ,$(firstword x$(MAKEFLAGS))展开就是$(filter %s, xrRs),而$(filter %s, xrRs)的返回值肯定不为空,条件成立, quiet-silent_第101行使用export导出变量quiet、Q和KBUILD_VERBOSE。sym命令分为"quiet_cmd_sym”和"cmd_sym”两个版本,这两个命令的功能都是一样的,区别在于make执行的时候输出的命令不同。原创 2023-05-03 17:10:20 · 1146 阅读 · 0 评论 -
05_Uboot源码目录分析
u-boot.cmd使用到了arm-linux-gnueabihf-ld.bfd,也就是链接工具,使用Id.bfd将各个 builtin.o文件链接在一起就形成了u-boot 文件。文件.u-boot.lds.cmd就是用于生成u-boot.lds链接脚本的,由于.u-bootlds.cmd文件内容太多,这里就不列出来了。u-boot.bin.cmd里面定义了一个变量: cmd u-boot.bin,此变量的值为“cp u-boot-nodtb.bin" u-boot.bin。原创 2023-05-02 16:53:34 · 989 阅读 · 0 评论 -
04_Uboot操作命令与其他命令
其中addr是ulmage在DRAM中的首地址, initrd是initrd的地址, fdt是设备树(.dtb)文件在DRAM中的首地址,如果initrd为空的话,同样是用“-”来替代。其中addr是ulmage在DRAM中的首地址, initrd是initrd的地址, fdt是设备树(.dtb)文件在DRAM中的首地址,如果initrd为空的话,同样是用“-”来替代。命令bootz有三个参数, addr是Linux镜像文件在DRAM中的位置, initrd是 initrd文件在DRAM中的地址。原创 2023-05-01 15:01:59 · 1186 阅读 · 0 评论 -
03_Uboot网络命令与MMC和文件操作命令
我们一般使用uboot中的nfs命令将Ubuntu中的文件下载到开发板的DRAM中,在使用之前需要开启Ubuntu主机的NFS服务,并且要新建一个NFS使用的目录,以后所有要通过NFS访问的文件都需要放到这个NFS目录中。从上图可以看出,分区0格式未知,因为分区0存放的uboot,并且分区0没有格式化,所以文件系统格式未知。从上图可以看出在225ms内读取了6785272个字节的数据,速度为28.8MiB/s,速度是非常快的,因为这是从EMMC里面读取的,而EMMC是8位的,速度肯定会很快的。原创 2023-04-29 20:05:35 · 2868 阅读 · 0 评论 -
02_Uboot基本命令与内存命令
上面命令设置bootargs的值为"console=ttymxc0,115200 root-/dev/mmeblk1p2 rootwaitrw",其中"console=ttymxc0,115200"、"root=/dev/mmeblk1p2"、"rootwait"和"rw"相当于四组"值",这四组值之间用空格隔开。上面说了, uboot命令里面的数字都是十六进制的,所以可以不用写“0x”前缀,十进制的20其十六进制为0x14,所以命令md后面的个数应该是14,如果写成20的话就表示查看32。原创 2023-04-17 21:47:22 · 1529 阅读 · 1 评论 -
01_什么是Uboot
uboot是个裸机程序,因此需要在其前面加上头部(IVT、DCD等数据)才能在I.MX6U上执行,图中的u-boot.imx文件就是添加头部以后的u-boot.bin, u-boot.imx就是我们最终要烧写到开发板中的uboot镜像文件。.MX6ULL开发板,那么就使用正点原子提供的uboot源码(也是在半导体厂商的uboot上修改的)。最常用的就是半导体厂商或者开发板厂商的uboot,如果你用的半导体厂商的评估板,那么就使用半导体厂商的uboot,如果你是购买的第三方开发板,比如正点原子的。原创 2023-04-16 20:31:23 · 586 阅读 · 1 评论