SDK/内核编译

编译内核和sdk时到没有太大问题,都能靠gpt or 修改menuconfig解决。比较棘手的果然还是只能靠自己摸索硬件hhh

烧录

这个也是狠狠折磨了我许久,gpt也一直满嘴跑火车,毕竟一开始串口连错了所以一直以为自己是烧录没对,整了半天【而且还是正确的操作反反复复尝试……仿佛坐牢】。不过这其中也学到了挺多。

f2753b5e6a40f9fea328223b197ede3

具体要做的是:

1
sudo fdisk /dev/sdb

关于fdisk及part这样的分区工具,这篇文章介绍得很详细:Linux 系统中关于磁盘分区工具的使用

然后进入后,n命令创建新分区,d删除现有分区。我们需要用n创建两个分区(大小随意),第一个用于存放bin文件。创建完分区之后,使用a命令将分区1标记为Boot,并且使用t将分区1的类型修改为W95 FAT32 (LBA),随后就可以保存退出了。具体流程及操作结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
$ sudo fdisk /dev/sdb

Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p

Disk /dev/sdb: 29.72 GiB, 31914983424 bytes, 62333952 sectors
Disk model: Storage Device
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd4c6d64f

Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):

Using default response p.
Partition number (1-4, default 1):
First sector (2048-62333951, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-62333951, default 62333951): +128M

Created a new partition 1 of type 'Linux' and of size 128 MiB.
Partition #1 contains a vfat signature.

Do you want to remove the signature? [Y]es/[N]o: yes

The signature will be removed by a write command.

Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p):

Using default response p.
Partition number (2-4, default 2):
First sector (264192-62333951, default 264192):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (264192-62333951, default 62333951):

Created a new partition 2 of type 'Linux' and of size 29.6 GiB.

Command (m for help): t
Partition number (1,2, default 2): 0c
Value out of range.
Partition number (1,2, default 2): 1
Hex code or alias (type L to list all): 0c

Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.

Command (m for help): a
Partition number (1,2, default 2): 1

The bootable flag on partition 1 is enabled now.

Command (m for help): p
Disk /dev/sdb: 29.72 GiB, 31914983424 bytes, 62333952 sectors
Disk model: Storage Device
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd4c6d64f

Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 2048 264191 262144 128M c W95 FAT32 (LBA)
/dev/sdb2 264192 62333951 62069760 29.6G 83 Linux

Filesystem/RAID signature on partition 1 will be wiped.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

然后更新分区表,格式化文件系统,复制bin和sd文件、弹出sd卡:

1
2
3
4
5
6
7
sudo partprobe 
sudo mkfs.vfat -F 32 /dev/sdb1
sudo mkfs.vfat -F 32 /dev/sdb2
sudo mount /dev/sdb1 /mnt/sdb1
sudo cp boot.sd fip.bin /mnt/sdb1
sudo umount /mnt/sdb1
sudo eject /dev/sdb

就烧录ok了。

与此同时也顺便学了下Windows磁盘管理,感觉也挺方便。

串口连接

不得不说十分惨痛……

也是因为我太狂妄自大不仔细了,一直以为RX就得连RX,TX就得连TX,然后下午焦灼之中才突然想起来这俩是不是以前教过得反着连……搜了一下果然是草。

这个错误害我起码花了三个小时在纠结烧录问题,一直以为没输出是因为烧录不对,发现结果那一刻我真没蚌珠。哎,以后还是别对自己太自信,毕竟本质上这种东西不是专业的学得也不够扎实,做什么都得先查一下该怎么做。

另一个问题是,乱码:

58c63791e1b4cac06a827f0ffa6b329

好像是说使用了个ch340的usb-ttl,似乎这个东西波特率有点问题不准确,具体不大懂:CH340G U-BOOT阶段乱码 总之最后简单粗暴地靠修改波特率为117200解决了。

然后别的倒是没什么问题,虽然摸索也花了点时间,都是小事。对着这张图参照就行了:

mmexport1697102534057

开发过程

感觉有一些东西,还是比较靠悟性23333在此记录些开发过程中的小发现。

  1. 关于引脚

    两个引脚可以通过image-20231019162502551这玩意连起来,这样就能使一个引脚的output作为另一个引脚的input。

    这是我在开发gpio中断时意识到的。这个道理虽然非常简单,但对于零基础胡乱摸索的我,知道这个还是需要一些灵光一闪。