步骤

焊flash芯片(如果大于16M,需要改烧录工具的源码)
焊引脚,为了串口看数据

焊接flash芯片,需要注意1号脚的位置,flash芯片在开发板背面,1号脚位置是靠近麦克风的那边

以下为编译相关步骤,参考连接,注意,下载的源码,选用spi flash模式

uboot

git clone -b v3s-spi-experimental https://github.com/Lichee-Pi/u-boot.git

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
Architecture select,选ARM
Device Drivers
SPI Flash Support
勾选自己flash的厂家名称,这里选Macronix SPI flash support
如果使用的是16MB以上的flash,需要勾选flash bank支持选项,否则最多只能读到16MB
code include/configs/sun8i.h,在include xxx之前添加
#define CONFIG_BOOTCOMMAND   "sf probe 0; "                           \
"sf read 0x41800000 0x100000 0x10000; " \
"sf read 0x41000000 0x110000 0x400000; " \
"bootz 0x41000000 - 0x41800000" #define CONFIG_BOOTARGS "console=ttyS0,115200 earlyprintk panic=5 rootwait " \
"mtdparts=spi32766.0:1M(uboot)ro,64k(dtb)ro,4M(kernel)ro,-(rootfs) root=31:03 rw rootfstype=jffs2"

编译

time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- >& | tee build.log

下载linux内核源码

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- licheepi_zero_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

选中

Device Drivers
<*>Memory Technology Device (MTD) support
<*> Command line partition table parsing 该项目用来解析uboot传递过来的flash分区信息。
<*> SPI-NOR device Support
File systems
<*> Miscellaneous filesystems
<*> Journalling Flash File System v2 (JFFS2) support
code arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts
&spi0 {
status ="okay"; mx25l25635e:mx25l25635e@ {
compatible = "jedec,spi-nor";
reg = <0x0>;
spi-max-frequency = <>;
#address-cells = <>;
#size-cells = <>;
}; };

编译

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
东西在在 arch/arm/boot/zImage

rootfs,以前弄过,直接用mkfs.jffs2生成文件系统了

sudo mkfs.jffs2 -s 0x100 -e 0x10000 -p 0x1AF0000 -d ~/downloads/rootfs/ -o ../jffs2.img

打包镜像

dd if=/dev/zero of=flashimg.bin bs=1M count=
dd if=$HOME/dev/embedded/lichee/zero/SPI_Flash/u-boot/u-boot-sunxi-with-spl.bin of=flashimg.bin bs=1K conv=notrunc
dd if=$HOME/dev/embedded/lichee/zero/SPI_Flash/linux-zero-4.13.y/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dtb of=flashimg.bin bs=1K seek= conv=notrunc
dd if=$HOME/dev/embedded/lichee/zero/SPI_Flash/linux-zero-4.13.y/arch/arm/boot/zImage of=flashimg.bin bs=1K seek= conv=notrunc
dd if=$HOME/dev/embedded/lichee/zero/SPI_Flash/jffs2.img of=flashimg.bin bs=1K seek= conv=notrunc

烧录固件

git clone -b spi-rebase https://github.com/Icenowy/sunxi-tools.git

修复超过16M的写入问题

code fel-spiflash.c,搜索

#define CMD_WRITE_ENABLE 0x06

aw_fel_spiflash_write_helper函数

改成如下部分

#define CMD_WRITE_ENABLE 0x06
#define SPI_FLASH_16MB_BOUN 0x1000000
# define CMD_BANKADDR_BRWR 0x17 //only SPANSION flash use it
# define CMD_BANKADDR_BRRD 0x16
# define CMD_EXTNADDR_WREAR 0xC5
# define CMD_EXTNADDR_RDEAR 0xC8
size_t bank_curr = ; void aw_fel_spiflash_write_helper(feldev_handle *dev,
uint32_t offset, void *buf, size_t len,
size_t erase_size, uint8_t erase_cmd,
size_t program_size, uint8_t program_cmd)
{
uint8_t *buf8 = (uint8_t *)buf;
size_t max_chunk_size = dev->soc_info->scratch_addr - dev->soc_info->spl_addr;
size_t cmd_idx, bank_sel; if (max_chunk_size > 0x1000)
max_chunk_size = 0x1000;
uint8_t *cmdbuf = malloc(max_chunk_size);
cmd_idx = ; prepare_spi_batch_data_transfer(dev, dev->soc_info->spl_addr);
//add bank support
{
cmd_idx = ;
bank_sel = offset /SPI_FLASH_16MB_BOUN;
if (bank_sel == bank_curr)
goto bar_end; /* Emit write enable command */
cmdbuf[cmd_idx++] = ;
cmdbuf[cmd_idx++] = ;
cmdbuf[cmd_idx++] = CMD_WRITE_ENABLE;
/* Emit write bank */
cmdbuf[cmd_idx++] = ;
cmdbuf[cmd_idx++] = ;
cmdbuf[cmd_idx++] = CMD_EXTNADDR_WREAR;
cmdbuf[cmd_idx++] = offset >> ;
/* Emit wait for completion */
cmdbuf[cmd_idx++] = 0xFF;
cmdbuf[cmd_idx++] = 0xFF;
/* Emit the end marker */
cmdbuf[cmd_idx++] = ;
cmdbuf[cmd_idx++] = ;
aw_fel_write(dev, cmdbuf, dev->soc_info->spl_addr, cmd_idx);
aw_fel_remotefunc_execute(dev, NULL);
bar_end:
bank_curr = bank_sel;
}
cmd_idx = ; prepare_spi_batch_data_transfer(dev, dev->soc_info->spl_addr); while (len > ) {
while (len > && max_chunk_size - cmd_idx > program_size + ) {
if (offset % erase_size == ) {
/* Emit write enable command */
cmdbuf[cmd_idx++] = ;
cmdbuf[cmd_idx++] = ;
cmdbuf[cmd_idx++] = CMD_WRITE_ENABLE;
/* Emit erase command */
cmdbuf[cmd_idx++] = ;
cmdbuf[cmd_idx++] = ;
cmdbuf[cmd_idx++] = erase_cmd;
cmdbuf[cmd_idx++] = offset >> ;
cmdbuf[cmd_idx++] = offset >> ;
cmdbuf[cmd_idx++] = offset;
/* Emit wait for completion */
cmdbuf[cmd_idx++] = 0xFF;
cmdbuf[cmd_idx++] = 0xFF;
}
/* Emit write enable command */
cmdbuf[cmd_idx++] = ;
cmdbuf[cmd_idx++] = ;
cmdbuf[cmd_idx++] = CMD_WRITE_ENABLE;
/* Emit page program command */
size_t write_count = program_size;
if (write_count > len)
write_count = len;
cmdbuf[cmd_idx++] = ( + write_count) >> ;
cmdbuf[cmd_idx++] = + write_count;
cmdbuf[cmd_idx++] = program_cmd;
cmdbuf[cmd_idx++] = offset >> ;
cmdbuf[cmd_idx++] = offset >> ;
cmdbuf[cmd_idx++] = offset;
memcpy(cmdbuf + cmd_idx, buf8, write_count);
cmd_idx += write_count;
buf8 += write_count;
len -= write_count;
offset += write_count;
/* Emit wait for completion */
cmdbuf[cmd_idx++] = 0xFF;
cmdbuf[cmd_idx++] = 0xFF;
}
/* Emit the end marker */
cmdbuf[cmd_idx++] = ;
cmdbuf[cmd_idx++] = ; /* Flush */
aw_fel_write(dev, cmdbuf, dev->soc_info->spl_addr, cmd_idx);
aw_fel_remotefunc_execute(dev, NULL);
cmd_idx = ;
} free(cmdbuf);
}

make

烧录

测试是否发现flash设备
sunxi-fel version
sunxi-fel -p spiflash-write ~/dev/embedded/lichee/zero/SPI_Flash/flashimg.bin

重新上电以后,是不是就看到串口有输出啦

荔枝派zero从焊接到跑起linux的更多相关文章

  1. 为嵌入式全志V3s荔枝派板卡添加USB MT7601U(小米随身WIFI)驱动

    折腾了了一天终于scan出环境热点了,感觉本来挺简单的事情,网上教程一大把还费了一天的劲,很丧.不过网上教程虽多,但是还还是有些不同之处的,现在特意总结一下 全志V3s荔枝派板卡 添加该驱动的过程. ...

  2. 树莓派和荔枝派,局域网socket 通信

    在虚拟机上面实现了socket 之间的通信之后,突发奇想,想要实现树莓派和 荔枝派zero之间的通信. 1.直接将虚拟机下面的程序复制过来,重新编译并且运行.发现是没有办法进行通信的.客户端一直报错: ...

  3. .NET跨平台之旅:生产环境中第2个跑在Linux上的ASP.NET Core站点

    今天我们在生产环境中上线了第2个跑在Linux上的ASP.NET Core站点.这是一个简单的Web API站点,通过命令行的方式调用安装在Linux服务器上的程序完成操作.之前用的是nodejs,现 ...

  4. .Net程序跑在Linux上

    .Net越来越拥抱开源了,今天就试了如何让.Net程序跑在Linux上,果然再无人可以阻挡.Net的脚步了. Linux Disibutaion:Open Logic 7.2 1.Install .N ...

  5. 嵌入式全志V3s荔枝派板卡移植 aircrack-ng

    我使用的是aircrack-ng-1.1.tar.gz这个版本的包. 编辑common.mak,在27行COMMON_FLAGS = 下加入嵌入式开发的环境 -I 和 -L : COMMON_CFLA ...

  6. 为嵌入式mplayer移植添加ALSA音频驱动(全志V3s荔枝派zero)

    首先准备mplayer和alsa_lib,我的是bulidroot添加后编译自动下载的,版本分别是alsa-lib-1.1.4.1和mplayer-1.3.0. 首先编译alsa_lib: ./con ...

  7. 荔枝派nano例子

    买回来,先短接flash芯片的14脚,然后上电,再断开14脚,开始怎么折腾都不行,最后发现是android线的问题,换成jlink ob送的android线就能找到设备了,真崩溃 lsusb,应该能看 ...

  8. 工业派-配置Intel神经计算棒二代(NCS2)

    最近两天在工业派ubuntu16.04上配置了Intel神经计算棒二代——Intel Neural Compute Stick,配置过程之艰辛我都不想说了,实在是太折磨人.不过历尽千辛万苦,总算让计算 ...

  9. 全志V3S 编译运行xboot笔记

    目录 全志V3S 编译运行xboot笔记 1.目的 2.环境准备 3.下载 3.1 fel模式进入 3.2 sunxi-fel工具的使用 3.3 烧录 4.串口打印 5.总结 全志V3S 编译运行xb ...

随机推荐

  1. python-gitlab 之更改 merge_method

    参考: https://docs.gitlab.com/ee/api/projects.html https://python-gitlab.readthedocs.io/en/stable/gl_o ...

  2. Go入门:创建第一个Go工程

    前言 我是一名iOS开发. 因为公司后台都用的Go. 因为对服务端不了解. 所以想自己学习学习. 环境 因为自己的电脑是mac.然后在阿里云买的是centOS的服务器. 所以下面搭建的环境都是在cen ...

  3. python生成测试报告HTMLTestRunner时报错ValueError: write to closed file的解决办法

    使用HTMLTestRunner时出现了以下问题: self.stream.write(output.encode('utf8')) ValueError: write to closed file ...

  4. NEW jobs: A Prepare. Prepare. Prepare. 怎么准备都不过分

    A  Prepare. Prepare. Prepare.   From: https://leetcode.com/explore/interview/card/leapai/272/general ...

  5. excel打开提示 文件格式和扩展名不匹配。文件可能已损坏或不安全。除非您信任其来源,否则请勿打开。是否仍要打开它?

    有的时候打开xls文档时,会提示“文件格式和扩展名不匹配.文件可能已损坏或不安全.除非您信任其来源,否则请勿打开.是否仍要打开它?” 遇到这种情况,我们需要 打开“注册表编辑器” win键+R键,打开 ...

  6. GitHub & GitHub Desktop能帮我们做什么

    GitHub: 1.代码版本管理 GitHub Desktop:

  7. Nginx——配置文件服务下载

    前言 只是临时搭建的一个下载服务,所以就直接用nginx来咯 步骤 解析域名 将域名解析到要部署应用对应的服务器,就是个解析操作,没啥好讲的 创建目录 # mkdir /data/install/ 配 ...

  8. Ofbiz项目学习——阶段性小结——更新数据

    一.根据一个字段进行修改 /** * 根据一个字段进行修改(这个条件字段可以是主键, 也可以不是主键) * @param dctx * @param context * @return */ publ ...

  9. 第4章 Spring的数据库开发

    4.1 Spring JDBC Spring的JDBC模块负责数据库资源管理和错误处理,化简了开发者对数据库的操作. 4.11 Spring JdbcTemplate的解析 * JdbcTemplat ...

  10. reids 数据库学习

    最近项目中用到了redis数据库,学习整理下 redis操作学习手册--key操作命令 http://www.cnblogs.com/stephen-liu74/archive/2012/03/26/ ...