2021年底生活轨迹和工作内容都做了重大改变,换了城市,换了工作领域,工作平台和工作内容也是相差甚远。花了大概一年半的时间在学习探索熟悉新的工作内容以及工作方式。不想把原来的知识沉淀给荒废掉,所以希望记录点什么,一来好记性不如烂笔头,而来也能督促勉励自己。
linux开发板 : JZ2440, 主控:s3c2440,虽然板子有点老,但是知识是具有继承性的,还是从这里开始吧。
1.uboot 配置以及编译
下载uboot-1.6.1源码 以及 补丁文件
1)解压: tar -xvf uboot-1.6.1.tar.bz2
2)打patch : cd uboot-1.6.1
patch -p1 < ../u-boot-1.1.6_jz2440.patch
(../ 根据实际路径而定, p1 - 忽略第一个斜杠之前的内容 也即 uboot-1.6.1的目录路径)
3)配置
make 100ask2440_config
OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE := $(CURDIR)
TOPDIR := $(SRCTREE)
LNDIR := $(OBJTREE)
export TOPDIR SRCTREE OBJTREE
MKCONFIG := $(SRCTREE)/mkconfig
export MKCONFIG
100ask24x0_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0
OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE := $(CURDIR)
TOPDIR := $(SRCTREE)
LNDIR := $(OBJTREE)
export TOPDIR SRCTREE OBJTREE
MKCONFIG := $(SRCTREE)/mkconfig
export MKCONFIG
100ask24x0_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0
等价于:
mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0
格式为$(var:str1=str2) 将变量var中的str1用str2替换,类似于$(patsubst str1,str2,$(var))
@$ 用在规则里表明不显示执行过程,只显示结果。
mkconfig:
(1).
while [ $# -gt 0 ] ; do
case "$1" in
--) shift ; break ;;
-a) shift ; APPEND=yes ;;
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
*) break ;;
esac
done
$# :传入的参数个数
-gt : 大于
shift 加数字表示左移n,不加数字,默认是1
$1 : 第一个参数,即 100ask24x0
没有 -- -a -n *等元素,所以这里就什么都不做。
(2).
[ "${BOARD_NAME}" ] || BOARD_NAME="$1" //如果没定义 BOARD_NAME,则 BOARD_NAME = 100ask24x0; note: if 前面成立,后面就不执行
(3)
[ $# -lt 4 ] && exit 1 #参数总数小于4个,exit
[ $# -gt 6 ] && exit 1 #参数总数大于6个,exit
(4)
if [ -z "$6" -o "$6" = "NULL" ] ; then
ln -s ${LNPREFIX}arch-$3 asm-$2/arch
else
ln -s ${LNPREFIX}arch-$6 asm-$2/arch
fi
-z :判空
-o :并且
4) 编译 make
此时目录下会生成一个 uboot.bin的文件 ,使用fileZlier传输到windows空间中,通过oflash烧写。
在windows上安装oflash驱动需要注意,可能会提示 目录缺少哈希值, 这里重新设置计算机重启时候选择 安装驱动时不需要数字签名即可。 可自行百度解决。百度是个好东西。