网站页面那个图怎么做,科技期刊,市场推广12种推广渠道,外贸订单首先是荔枝派的官方文档#xff0c;写的不是很细#xff0c;应当说我们必须明确几点#xff1a;
出厂时 SPI Flash 自带了一个 U-BootLinux Kernel#xff08;出厂的时候可能烧过了#xff09;#xff0c;可直接拿来用。如果希望自己烧固件#xff0c;才需要后续步骤必…首先是荔枝派的官方文档写的不是很细应当说我们必须明确几点
出厂时 SPI Flash 自带了一个 U-BootLinux Kernel出厂的时候可能烧过了可直接拿来用。如果希望自己烧固件才需要后续步骤必须使用移植版的 sunxi-tools 工具而非官方版必须使用移植版的 U-Boot 工具而非官方版可以使用最新的主线 Linux 内核荔枝派 Nano 没有 reset 按钮且使用的是片内 DDR1 DRAM大小为 32MB外部 SPI Flash 为 16MB。芯片架构 ARM926EJ-S
编译 U-Boot
下载并安装交叉编译器
wget http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz
上边的下载相当慢不知是不是我这边网络的原因 我直接windows下迅雷下载了复制到之前建立的共享目录中
sudo tar -vxJf gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz --directory/opt/
解压到 /opt/目录下
sudo vim /etc/bash.bashrc
# 在文件末尾 添加以下内容
PATH$PATH:/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin
# 添加完毕# 使路径生效
sudo source /etc/bash.bashrc
注意这里要加sudo 否则用sudo编译会提示你找不到arm-linux-gnueabi-gcc
此时可用arm-linux-gnueabi-gcc -v 进行测试若普通用户状态下没有成功通过 sudo su 切换到root用户再尝试下载并编译u-boot
由于用的是荔枝派的小板子 所以从荔枝派的代码仓库中获取
sudo git clone https://github.com/Lichee-Pi/u-boot.git -b nano-v2018.01 #把代码从仓库克隆到本地
cd u-boot #进入u-boot目录
git branch -a #查看分支
git checkout nano-v2018.01 #切换到需要的分支
make ARCHarm CROSS_COMPILEarm-linux-gnueabi- licheepi_nano_spiflash_defconfig
# 此处告知make采用arm-linux-gnueabi下的所有交叉编译工具目标架构为Arm设定各默认配置为 nano 的spiflash支持版
# 若不带spi-flash的板子请换成 licheepi_nano_defconfig
make ARCHarm menuconfig # 进行可视化配置
若提示没有curses.h,则需安装libncurses5-dev库
sudo apt-get install libncurses5-dev
执行编译
make ARCHarm CROSS_COMPILEarm-linux-gnueabi- -j8 # -j8 指8线程编译
若提示recipe for target scripts/dtc/pylibfdt/_libfdt.so failed 缺少python库
apt-get install swig python-dev python3-dev4. 升级gcc版本
在执行make 时出现报错Your GCC is older than 6.0 and is not supported ubuntu update gcc-6.1
解决方法更新GCC
方法一 下载并自己编译
1wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.gz #下载压缩包可到windows下下载
2tar -zvxf gcc-6.1.0.tar.gz --directory/usr/local/ #解压到 /usr/local目录下
3cd /usr/local/gcc-6.1.0 #进入目录
4sudo ./contrib/download_prerequisites #下载所需要的文件
5sudo mkdir build #创建build目录
6cd build #进入build迷了路
7sudo ../configure -enable-checkingrelease -enable-languagesc,c -disable-multilib #生成Makefile
8sudo make -j4 #执行make 过程很慢耐心等待
9sudo make install #执行make install
方法二 下载ubuntu打包好的gcc
1添加ppa到库sudo add-apt-repository ppa:ubuntu-toolchain-r/testsudo apt-get update
2安装最新版本的gcc9sudo apt-get install gcc-9 g-9sudo apt-get install gcc-9 g-9
3更新系统(可选)sudo apt-get upgrade
4强制更新软件包到最新版本并解决缺少的依赖包sudo apt-get dist-upgrade
5刷新db并locatesudo updatedbsudo ldconfiglocate gcc | grep -E /usr/bin/gcc-[0-9] #此指令可查看所有安装的gcc版本locate g | grep -E /usr/bin/g\\-[0-9] #此指令可查看所有安装的g版本
6切换gcc/g版本我们正常使用的gcc/g其实都是/usr/bin/gcc和/usr/bin/g, 他们指向了/usr/bin下真正版本的gcc/g程序cd /usr/binsudo rm gccsudo ln -s gcc-9 gccsudo rm gsudo ln -s g-9 g
7查看当前gcc/g版本gcc -vg -v 据说是因为 Winbond 涨价了所以板子上的 SPI Flash 换成了大陆产 xt25f128需要修改 U-Boot 的 arch/arm/dts/suniv-f1c100s-licheepi-nano.dts
spi0 {pinctrl-names default;pinctrl-0 spi0_pins_a;status okay;flash0 {#address-cells 1;#size-cells 1;compatible winbond,xt25f128, jedec,spi-nor;reg 0;spi-max-frequency 40000000;};
};然后修改 drivers/mtd/spi/spi_flash_ids.c在 Winbond 节加入
{xt25f128, INFO(0x0b4018, 0x0, 64*1024, 256, RD_FULL | WR_QPP | SECT_4K) },移植版的 U-Boot 没有做这个步骤也没有任何说明这不是故意坑么 烧录
烧录 U-Boot 到 SPI Flash 是必须的至于引导 Linux可以把 Linux 映像放到 SD、TF 卡中也可以直接烧到 SPI Flash 中。这里我采用后者。为此我们准备一个打包脚本因为我这里使用 initramfs所以就不需要额外 rootfs 了
dd if/dev/zero offirmware.bin bs1M count16 2/dev/null
printf create firmware.bin, size 0x%04x\n $[1024*1024*16]echo
echo | Bootloader: 1MB
echo ----------------------
echo | dtb: 32KB
echo ----------------------
echo | zImage: 8MB
echo ----------------------
echo | rootfs: .MB
echo dd ifu-boot/u-boot-sunxi-with-spl.bin offirmware.bin bs1k convnotrunc 2/dev/null
printf uboot: 0x0000, size 0x%04x\n $[1024*1024]dd iflinux/arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dtb offirmware.bin bs1k seek1024 convnotrunc 2/dev/null
printf dtb: 0x%04x, size 0x%04x\n $[1024*1024] $[32*1024]dd iflinux/arch/arm/boot/zImage offirmware.bin bs1k seek$[102432] convnotrunc 2/dev/null
printf zImage: 0x%04x, size 0x%04x\n $[1024*(102432)] $[1024*1024*8]#dd ifjffs2.img offirmware.bin bs1K seek$((1024328192)) convnotrunc 2/dev/null
printf rootfs: 0x%04x, size 0x%04x\n $[1024*(1024321024*8)] $[1024*(1024*16 - 1024*9 - 32)]echo sf probe 0 50000000 0; sf erase 0 0x1000000; reset
echo sudo sunxi-fel -p spiflash-write 0 firmware.bin注意这个 dtb 文件应该使用 linux 编译目标 dtbs 生成而不应该使用 U-Boot 所生成的 dtb 文件。
然后烧录。根据官方的文档先把 SPI Flash 的 CS 脚拉低然后芯片进入 FEL 模式后进行操作。测试发现sunxi-tools 的烧录命令似乎没有进行 erase导致我后面烧录的时候里面的数据根本没有变化。
因此我们在烧新的 U-Boot 前应该先进入出厂时的 U-Boot 用以下命令清空 SPI Flash 的 16MB 空间注意 0 和 50000000之间没有冒号别被官方文档骗了
sf probe 0 50000000 0
sf erase 0 0x1000000
reset重新上电由于没有 SPL 头部芯片会自动进入 FEL 模式。然后就可以使用 sunxi-tools 来烧写了。 这么隐蔽的坑那感觉谁试谁知道 引导 Kernel
重新上电在 U-Boot 中执行
setenv bootargs consoletty0 consolettyS0,115200n8
sf probe 0 50000000 0
sf read 0x80C00000 0x100000 0x8000
sf read 0x80008000 0x108000 0x800000
bootz 0x80008000 - 0x80C00000如果你的内核映像在 SD 卡中
setenv bootargs consoletty0 consolettyS0,115200n8
load mmc 0:1 0x80C00000 suniv-f1c100s-licheepi-nano.dtb
load mmc 0:1 0x80008000 zImage
bootz 0x80008000 - 0x80C00000最终效果
就是在用户登录那里总是有问题明明已经关闭密码了却还提示密码错误设置一个有效密码仍然是密码错误见鬼。最后索性不需要登录了。
自己画板子
https://www.thirtythreeforty.net/posts/2019/12/my-business-card-runs-linux/#source-code
源代码
https://github.com/thirtythreeforty/businesscard-linux
电路原理图
https://www.thirtythreeforty.net/posts/2019/12/my-business-card-runs-linux/businesscard.pdf
FC100s 技术文档
https://www.thirtythreeforty.net/media/F1C100s_Datasheet_V1.0.pdf
https://www.thirtythreeforty.net/media/Allwinner_F1C600_User_Manual_V1.0.pdf
任何程序错误以及技术疑问或需要解答的请添加