15AH, San Francisco

California, United States.

Send Your Mail At:

tianyingkejishe@sina.cn

Working Hours

Mon-Sat: 9.30am To 7.00pm

归档标题

Autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et dolore feugait.

月度归档 2月 9, 2023

【Ubuntu】内核升级降级

内核变更(升级或者降级) 
检查目标内核版本是否存在
sudo apt search 'linux-image-5.11.0-44-generic' 
若存在,继续安装
sudo apt install 'linux-image-5.11.0-44-generic’ 
更新
sudo vi /etc/default/grub 
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.11.0-44-generic" 
执行内核锁定步骤
sudo update-initramfs -u -k all 
sudo update-grub 
reboot 
安装新版本内核头文件,用于开发编译
sudo apt install linux-headers-5.11.0-44-generic 
锁定内核版本
sudo apt-mark hold linux-headers-5.11.0-44-generic linux-image-5.11.0-44-generic

【Linux】linux fdisk tf卡分区操作解析说明

/*****************************************************************************
     *                   linux fdisk tf卡分区操作解析说明
     * 说明:
     *     本文主要是解析linux fdisk命令的使用,是一个朋友留下的自动化脚本。
     *
     *                                       2015-9-16 晴 深圳 南山平山村 曾剑锋
     ****************************************************************************/
    #! /bin/sh
     
    # 卸载接下来需要分区的设备
    umount    /dev/mmcblk1boot0
    umount    /dev/mmcblk1boot1
    umount    /dev/mmcblk1p1
    umount    /dev/mmcblk1p2
    sync                                    # 同步上面的操作
    sleep                                  # 等待1秒
     
    fdisk    /dev/mmcblk1    << EOF          # 开始分区
    d           # 删除操作
               # 删除分区1
    d           # 删除操作
               # 删除分区2,其实只剩下2,这里会出现menu
    m           # 显示操作menu,相当于帮助
    m           # 显示操作menu,相当于帮助
    n           # 创建新分区,相当于new
    p           # 创建primary分区
               # 创建primary分区1
                # First sector (-, default ):
    +50M        # Last sector, +sectors or +size{K,M,G} (-, default ): +50M, Partition  of type Linux and of size  MiB is set
    a           # toggle a bootable flag, 选择启动分区
               # 选择分区1作为启动分区
    t           # change a partition's system id, 改变分区类型
    c           # c  W95 FAT32 (LBA),选择FAT32格式
    n           # 创建新分区,相当于new
    p           # 创建primary分区
               # 创建primary分区2
                # First sector (-, default ):
                # Last sector, +sectors or +size{K,M,G} (-, default ): Using default value , Partition  of type Linux and of size 3.7 GiB is set
    p           # 查看创建结果
    w           # 保存退出
    EOF
    sync                                # 同步以上操作
    sleep 
     
    umount /dev/mmcblk1p1               # 卸载创建的分区
    umount /dev/mmcblk1p2               # 卸载创建的分区
    sync                                # 同步以上操作
    sleep 
     
    mkdosfs  -F  /dev/mmcblk1p1       # 以FAT32格式化mmcblk1p1分区
    sync
    sleep 
     
    mkfs.ext3 /dev/mmcblk1p2            # 以ext3格式化mmcblk1p2分区
    sync
    sleep 
     
    echo "finish make tf card"          # 输出提示信息

【uboot】Uboot烧录及使用

一、UBOOT学习

0、基础知识

进入uboot,查询到dram 起始地址为0x80000000,大小为0x20000000(512Mb)

bdinfo
arch_number = 0x00000000
boot_params = 0x80000100
DRAM bank   = 0x00000000
-> start    = 0x80000000
-> size     = 0x20000000
eth0name    = FEC1
ethaddr     = 88:30:6D:AF:F4:8F
current eth = FEC1
ip_addr     = 192.168.1.3
baudrate    = 115200 bps
TLB addr    = 0x9FFF0000
relocaddr   = 0x9FF55000
reloc off   = 0x18755000
irq_sp      = 0x9EF52EA0
sp start    = 0x9EF52E90
DDR ADDR程序
0x80800000zImage
0x83000000dtb

1、UBOOT裸程序构成

由 IVT + Boot Data + DCD + bin 构成,在DDR中的存放地址如下:

DDR ADDR内容
0x877ff000boot load start
…(+ 1KB, block 0, block 1)reserve
0x877ff400 (bolck 2)IVT(u-boot.imx)
Boot data
DCD
(+ 3Kb)( IVT+BOOTDATA+DCD)
0x87800000bin

①IVT内容

TAG、指定IVT大小
bin PC指针
DCD地址(ddr)
boot data地址(ddr)
IVT地址(ddr)
②Boot Data内容

xxx.imx起始地址
镜像大小
③DCD内容

TAG、DCD大小、版本
寄存器及值,配置基础功能(时钟、DDR等)

2、Uboot烧写方法


①从linux用户空间直接将uboot.imx烧录到SD/EMMC设备

烧录到SD卡

#将SD卡插入开发板或者ubunto开发环境
$ sudo fdisk -l #查看SD卡/dev名
$ sudo dd if=u-boot.imx of=/dev/yourSdName bs=1024 seek=1 conv=fsync

烧录到EMMC

$ echo 0 > /sys/block/mmcblk1boot0/force_ro #开启emmc写功能
$ dd if=u-boot.imx of=/dev/mmcblk1boot0 bs=1024 seek=1 conv=fsync
$ echo 1 >/sys/block/mmcblk1boot0/force_ro #关闭写
$ mmc bootpart enable 1 1 /dev/mmcblk1 #使能分区1

②从uboot中下载后,再写入到SD/EMMC设备block 2处

=> setenv serverip 192.168.1.101
=> tftp 80800000 u-boot.imx
Using FEC1 device
TFTP from server 192.168.1.101; our IP address is 192.168.1.3
Filename 'u-boot.imx'.
Load address: 0x80800000
Loading: #########################
	 938.5 KiB/s
done
Bytes transferred = 363520 (58c00 hex)
 => mmc dev 0 0
switch to partitions #0, OK
mmc0 is current device
=> mmc write 80800000 2 2c6 #363520/512

MMC write: dev # 0, block # 2, count 710 ... 710 blocks written: OK 
#emmc需要这一步
=>mmc partconf 1 1 0 0
#重启后,查看版本
=> version  

③ 使用mfgtool通过串口烧录

1、配置BOOT_CFG 为01000000
2、连接串口
3、烧录

④ 在ubuntu开发环境下使用imxdownload

1、插入SD卡
2、找到/dev名
3、./imxdownload u-boot.bin /dev/sdd

3、Uboot下常用命令

=> mmc info #查看当前mmc设备信息
=> mmc list #查看mmc设备列表
=> mmc dev 1 [可选part]#切换到mmc设备1(默认到分区part=0)
=> mmc part #查看当前设备分区
=> mmc read/write/erase 80800000 600 10 #读取0x600块开始10个块到80800000ddr addr.
=> nand info
=> nand device
=> nand erase addr size
=> nand wrete/read addr off size
=> fatinfo mmc 0:1 #产看分区文件系统信息
=> fat[ext2/ext4]ls mmc 0:1 #查看mmc0分区1下文件
=> fat[ext]load mmc 0:1 80800000 file #将文件读取到ddr
=> fdt addr 80800000 #设置设备树地址
=> fdt print #查看设备树文件内容
=> bootz 80800000 - 83000000 #从ddr启动linux镜像zImage(808) 、inidrd(-)、dtb(830)
=> bootm 80800000 #从ddr启动镜像uImage
=> boot #从bootcmd读取,并执行命令
=> reset #重启
=> go addr #跳转到addr并运行bin程序
=> run xxxcmd #运行自定义的xxxcmd(类似于bootcmd)

【Linux】文件系统到处GPIO配置

GPIO号为416具体转换看芯片手册。

echo 416 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio416/direction
echo 1 > /sys/class/gpio/gpio416/value
echo 0 > /sys/class/gpio/gpio416/value

echo in > /sys/class/gpio/gpio416/direction
cat /sys/class/gpio/gpio416/value

echo falling > /sys/class/gpio/gpio416/edge
cat /proc/interrupts |grep gpio