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