uboot源码梳理

U-boot移植(V3s)

Bug1: V3s启动内核到文件系统后持续报错 [ 63.431679] sunxi-mmc 1c10000.mmc: smc 1 err, cmd 52, RE !!
看打印log发现定位在linux内核启动过程中,仔细观察发现是uboot启动内核前,bootarg设置的问题。

#define CONFIG_BOOTCOMMAND   "setenv bootm_boot_mode sec; " \
                            "load mmc 0:1 0x41000000 zImage; "  \
                            "load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb; " \
                            "bootz 0x41000000 - 0x41800000;"

这里使用的是sun8i-v3s-licheepi-zero-dock.dtb,应该使用sun8i-v3s-licheepi-zero.dtb;

在内核启动过程中,想要在屏幕和串口终端上都看到log设置:

setenv bootargs console=tty0 console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw  vt.global_cursor_default=0

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加`
make的技巧:
打印Makefile的规则和变量: make -p
然后可以存入文件:make -p >1.txt
如果想删除文件中的注释: vi进入文件,执行:g/^#/d

一、从Makefile开始

1.1执行make LicheePi_Zero_defconfig

会打印:

  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  YACC    scripts/kconfig/zconf.tab.c
  LEX     scripts/kconfig/zconf.lex.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#

执行make LicheePi_Zero_defconfig -p >bananapeelx.txt
->删除注释->分析makefile的执行流程。
依此找到以下四行内容:

1.  LicheePi_Zero_defconfig: scripts/kconfig/conf
	$(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
2.  scripts/kconfig/conf: FORCE scripts/kconfig/conf.o scripts/kconfig/zconf.tab.o
3.  scripts/kconfig/conf.o: scripts/kconfig/conf.c FORCE
4.  scripts/kconfig/zconf.tab.o: scripts/kconfig/zconf.tab.c FORCE scripts/kconfig/zconf.lex.c 

为了生成LicheePi_Zero_defconfig,需要得到scripts/kconfig/conf工具,而这个工具依赖于scripts/kconfig/conf.o 。scripts/kconfig/zconf.tab.o,这两个.o是由scripts/kconfig/conf.c和 scripts/kconfig/zconf.tab.c生成。
scripts/kconfig/conf: FORCE scripts/kconfig/conf.o scripts/kconfig/zconf.tab.o。
第一行就可以简化为:

scripts/kconfig/conf  --defconfig=arch/../configs/LicheePi_Zero_defconfig Kconfig
#加上uboot版本号
UBOOTVERSION=2024.01 scripts/kconfig/conf  --defconfig=arch/../configs/LicheePi_Zero_defconfig Kconfig

1.2分析scripts/kconfig/conf --defconfig=arch/../configs/LicheePi_Zero_defconfig Kconfig干了什么事情:

执行 make LicheePi_Zero_defconfig V=1
打印出

make -f ./scripts/Makefile.build obj=scripts/basic
  cc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11       -o scripts/basic/fixdep scripts/basic/fixdep.c   
rm -f .tmp_quiet_recordmcount
make -f ./scripts/Makefile.build obj=scripts/kconfig LicheePi_Zero_defconfig
  cc -Wp,-MD,scripts/kconfig/.conf.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11     -c -o scripts/kconfig/conf.o scripts/kconfig/conf.c
  bison -oscripts/kconfig/zconf.tab.c -t -l scripts/kconfig/zconf.y
  flex -oscripts/kconfig/zconf.lex.c -L scripts/kconfig/zconf.l
  cc -Wp,-MD,scripts/kconfig/.zconf.tab.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -Iscripts/kconfig -c -o scripts/kconfig/zconf.tab.o scripts/kconfig/zconf.tab.c
  cc   -o scripts/kconfig/conf scripts/kconfig/conf.o scripts/kconfig/zconf.tab.o   
scripts/kconfig/conf  --defconfig=arch/../configs/LicheePi_Zero_defconfig Kconfig
#
# configuration written to .config
#

进入u-boot-2024.01/scripts/kconfig/conf.c查看main函数。由scripts/kconfig/conf --defconfig=arch/../configs/LicheePi_Zero_defconfig Kconfig
得到:

ac = 3
av[0] = scripts/kconfig/conf 
av[1] = --defconfig=arch/../configs/LicheePi_Zero_defconfig
av[2]= Kconfig

观察到以下程序,可知defconfig_file = “arch/…/configs/LicheePi_Zero_defconfig”

case defconfig:
case savedefconfig:
	defconfig_file = optarg;
	break;
name = av[optind];  //解析Kconfig文件,name = "Kconfig"
conf_parse(name);
if (conf_read(defconfig_file)) //再读取Kconfig文件
conf_set_all_new_symbols(def_default);
conf_write(NULL) //写到.config文件

上述分析整理如图
在这里插入图片描述

1.3熟悉Kconfig

单项配置:在顶层Kconfig文件中添加

config BANANAPEELX
	bool "test for v3s"
	default y
	help 
	  just for Kconfig test

执行make menuconfig后出现
在这里插入图片描述
菜单配置(多选)

menu "Ban menu"
config v3s
	tristate "menu test 1"
	help 
	  just for test menu
config stm32mp157
	tristate "menu test 2"
	help 
	  just for test menu
endmenu

需要注意:最后一行要多敲一个换行,否则会报错,和MDK一样的Bug

菜单配置(单选以及依赖单选)忽略

小结:
1.默认配置: make ***deconfig
2.手动配置: make menuconfig
用来控制哪些文件被编译
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、pandas是什么?

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

问题记录1:

执行UBOOTVERSION=2024.01 scripts/kconfig/conf --defconfig=arch/../configs/LicheePi_Zero_defconfig Kconfig报错

sh: 1: /scripts/gcc-version.sh: not found
sh: 1: /scripts/gcc-version.sh: not found
Kconfig:66: syntax error
Kconfig:65: invalid option
sh: 1: /scripts/clang-version.sh: not found
Kconfig:74: syntax error
Kconfig:73: invalid option
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_45281309

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值