1、Uboot的流程调用:
1.1、cmd_process函数是怎么被调用到的:
cmd_process在common/command.c
1.2、uboot阶段断电,后续起不来,可能要换线去使用,也许和电源线有关
2、git 相关使用
2.1 .gitignore相关的使用
1、空行或是以 # 开头的行即注释行将被忽略。
2、可以在前面添加 正斜杠/ 来避免递归,下面的例子中可以很明白的看出来与下一条的区别。
3、可以在后面添加 正斜杠/ 来忽略文件夹,例如 build/ 即忽略 build 文件夹,/doc/build/ 这样的目录也会忽略。
4、可以使用 ! 来否定忽略,即比如在前面用了*.apk,然后使用!a.apk,则这个a.apk不会被忽略。
5、* 用来匹配零个或多个字符,如*.[oa]忽略所有以".o"或".a"结尾;
6、[] 用来匹配括号内的任一字符,如 [abc],也可以在括号内加连接符,如 [0-9] 匹配0至9的数;
7、? 用来匹配单个字符。
# 忽略 .a 文件
*.a
# 但否定忽略 lib.a, 尽管已经在前面忽略了 .a 文件
!lib.a
# 仅在当前目录下忽略 TODO 文件, 但不包括子目录下的 subdir/TODO
/TODO
# 忽略 build/ 文件夹下的所有文件,/doc/build/ 这样的目录也会忽略
build/
# 忽略 doc/notes.txt, 不包括 doc/server/arch.txt
doc/*.txt
# 忽略所有的 .pdf 文件 在 doc/ directory 下的
doc/**/*.pdf
https://www.cnblogs.com/jmcui/p/9891428.html
2.2 问题描述:git add 文件之后,如何取消add?
使用git add 命令添加文件之后,还没有git commit ,可以使用
首先
git status 查看文件状态
想要 add 的就添加上,想要restore 的就去掉
然后使用
git commit --amend 命令,会弹出一个编辑页面,想要修改commit -m "" 的内容就可以在这里修改.
最后
git push origin HEAD:refs/for/分支名
2.3 git commit后,如何进行撤销commit操作
我们可以使用命令:git reset --soft HEAD^ 这样就成功撤销了commit。
使用git reset --hard HEAD^ 这样连add也撤销了。
2.4 改变分支
git checkout -b <new-branch> origin/<old-branch>
git checkout -b origin/hm5002 hm5002
注意每次提交分支之前,看下前面提交的分支是哪个分支,和当前节点的不一样就要切换
https://blog.csdn.net/linyichao123/article/details/128359279
2.5 Untracked files:怎么处理(太多文件)
git add .
git reset --hard HEAD
2.6 如果上传的文件相比以前没有改变,使用git commit --amend 后,就会报如下错误
No changes
You asked to amend the most recent commit, but doing so would make
it empty. You can repeat your command with --allow-empty, or you can
remove the commit entirely with "git reset HEAD^".
git commit --amend --allow-empty
2.7 撤销gerrit上面的文件
git checkout bcb9d469569705b57b277dad06907743757a7f13 -- apical/bbmain-apical/bbmain.c
3、.sh脚本
3.1
cd -,返回之前目录下
if [ ]; then
fi if的结构
case “” in
“”)
;;
esac循环结构
read -p “” choice :把终端输入的变量给choice
export SECURE_BOOT_FLAG=off
case "$1" in
"")
make image -j32
这里用来判断SECURE_BOOT_FLAG是否存在并且等于on
if [ -n "$SECURE_BOOT_FLAG" ] && [ "$SECURE_BOOT_FLAG" = "on" ]; then
cd $PWD/image/security_boot_tools && make clean && make
cd -
cp -rf $PWD/image/security_boot_tools/image_secure/* $PWD/image/output/images/
fi
;;
esac
$(basename “$0”)
$0,当前脚本的名称,带脚本与工作目录之前的相对路径
basename 去除字符串路径部分
expr整数运算(还有字符串长度,字符串比较,匹配,提取等)
function do_project_config()
{
while true; do
count=1
echo ""
for file in `ls $PROJ_TOP_DIR/projconfs/*.h`; do
if [ "$(basename $file .h)" != "projconf" ]; then
config_array[$count]=$(basename $file .h)
echo $count. ${config_array[$count]}
count=`expr $count + 1`
fi
done
echo ""
read -p "please select a project config: " choice
if [ "$choice" -gt 0 -a "$choice" -lt "$count" ] 2> /dev/null ; then
break
else
echo -e "incorrect index number !\n"
fi
done
cp -v $PROJ_TOP_DIR/projconfs/${config_array[$choice]}.h $PROJ_TOP_DIR/projconfs/projconf.h
echo -e "\n\033[32musing project config: ${config_array[$choice]}\033[0m\n"
}
•使用awk命令处理$PROJ_TOP_DIR/projconfs/projconf.h文件。awk的脚本 2 = = " ′ 2=="' 2=="′key’“,意味着它在每一行中查找第二列(假设文件格式为key-value形式)与变量key相匹配的行。
•对于匹配的行,{print $3}打印第三列,即匹配键对应的值。•管道操作|将awk的输出传递给sed命令,sed 's/[”\r]//g’用于去除提取出的值中的双引号和回车字符,确保字符串干净。
function export_project_config()
{
key=$1
val=`awk '$2=="'$key'" {print $3}' $PROJ_TOP_DIR/projconfs/projconf.h | sed 's/[\"\r]//g'`
export $key=$val
}
export_project_config CONFIG_TOOLCHAIN_TYPE
export_project_config CONFIG_PROJ_DECONFIG
3.2 .mk文件
注意这里的[],前后要有空格,否则会有问题 ,后面的\,也是必须得打上去
if [ -e $(APK_INSTALL_DIR)/res ]; then \
cp -rf $(APK_INSTALL_DIR)/res $(customer$(RESOURCE))/ ; \
fi;
4、python相关
python -v,找不到路径
bash: /usr/bin/python: No such file or directory
解决:
cd /usr/bin 进到目录下,看下指向是不是没问题
查看的是python的软连接
whereis python 已经列出来了版本及对应目录
rm -rf /usr/bin/python 清楚软连接
ln -s /usr/local/bin/python3.8 /usr/bin/python
#这里要注意,不要用成了ln -s /usr/bin/python3.8 /usr/bin/python要根据whereis下的路径来看
https://blog.csdn.net/torpidcat/article/details/105823644
5、设备树相关知识点
dts:设备树,是一种描述硬件的数据结构,一个dts对应一个开发板。dts文件中会包含有dtsi,就类似于C语言当中的头文件,把板级相同的节点定义都包含在同一个文件中。很多时候我们不必从头开始写一个设备树,大多数情况下都是在原厂Soc提供的设备树基础上进行修改。
参考网址
https://zhuanlan.zhihu.com/p/656691650
1、#address-cells 和 #size-cells
soc {
#address-cells = <1>;
#size-cells = <1>;
compatible = "simple-bus";
interrupt-parent = <&gpc>;
ranges;
ocrams: sram@900000 {
compatible = "fsl,lpm-sram";
reg = <0x900000 0x4000>;
};
};
#address-cells和 #size-cells属性同时存在,在设备树ocrams结构中, 它们用在有子节点的设备节点(节点),用于设置子节点的“reg”属性的“书写格式”。
补充:reg属性值由一串数字组成,如上图中的reg = <0x900000 0x4000>, ret属性的书写格式为reg = < cells cells cells cells cells cells…>,长度根据实际情况而定, 这些数据分为地址数据(地址字段),长度数据(大小字段)。
#address-cells,用于指定子节点reg属性“地址字段”所占的长度(单元格cells的个数)。 #size-cells,用于指定子节点reg属性“大小字段”所占的长度(单元格cells的个数)。
例如#address-cells=2,#address-cells=1,则reg内的数据含义为reg =
, 因为每个cells是一个32位宽的数字,例如需要表示一个64位宽的地址时,就要使用两个address单元来表示。 而假如#address-cells=1,#address-cells=1,则reg内的数据含义为reg = < address size address size address size>。总之#size-cells和#address-cells决定了子节点的reg属性中哪些数据是“地址”,哪些数据是“长度”信息
2、ranges
属性值类型:任意数量的 <子地址、父地址、地址长度>编码
soc {
#address-cells = <1>;
#size-cells = <1>;
compatible = "simple-bus";
interrupt-parent = <&gpc>;
ranges;
busfreq {
/*-------------以下内容省略--------------*/
};
}
该属性提供了子节点地址空间和父地址空间的映射(转换)方法,常见格式是ranges = <子地址, 父地址, 转换长度>。 如果父地址空间和子地址空间相同则无需转换,如示例中所示,只写了renges,内容为空,我们也可以直接省略renges属性。
比如对于#address-cells和#size-cells都为1的话,以ranges=<0x0 0x10 0x20>为例,表示将子地址的从0x0~(0x0 + 0x20)的地址空间映射到父地址的0x10~(0x10 + 0x20)。