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.

分类归档 Linux

【Linux】ncurses交叉编译

1、下载源文件

http://ftp.gnu.org/pub/gnu/ncurses/

Tags · mirror/ncurses (github.com)

Ncurses project files : Ncurses (launchpad.net)

2、加压并配置

./configure  --prefix=/usr/aarch64-linux-gnu --host=aarch64-linux  CC=aarch64-linux-gnu-gcc --without-cxx --without-cxx-binding --without-ada --without-manpages --enable-overwrite --without-debug --without-tests --with-shared --without-tests --without-progs

3、编译并安装

make&&make install

【Linux】make cfg使用

make cfg all tgt=rom ARCH=mips CROSS_COMPILE=mipsel-linux- DEBUG=-g

第一部分:ARCH=mips CROSS_COMPILE=mipsel-linux- DEBUG=-g

ARCH=mips 设置了平台是mips平台
CROSS_COMPILE=mipsel-linux-  设置交叉编译器前缀,在编译时会替换成mipsel-linux-,之所以设置环境变量,一个是方便在这儿不用输入绝对路径,当找不到交叉编译器的时候,需要输入交叉编译器的绝对路径
DEBUG=-g 设置调试信息

第二部分:make cfg all tgt=rom

make cfg 是配置
make all 
make tgt=rom 在Makefile.inc里可以看到,是生成的二进制文件

【Linux】libmongoc交叉编译

1、下载并解压

https://github.com/mongodb/mongo-c-driver/releases/download/1.23.4/mongo-c-driver-1.23.4.tar.gz

编译环境:Ubuntu 20.04

2、环境配置

 sudo apt-get install cmake libssl-dev libsasl2-dev

tar xzf mongo-c-driver-1.23.4.tar.gz
cd mongo-c-driver-1.23.4
mkdir cmake-build
cd cmake-build
cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF -DCMAKE_C_COMPILER=/usr/bin/aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=/usr/bin/aarch64-linux-gnu-g++ -DOPENSSL_INCLUDE_DIR=/usr/aarch64-linux-gnu/include/openssl/ -DCMAKE_PREFIX_PATH=/usr/lib/aarch64-linux-gnu/ -DCMAKE_INSTALL_PREFIX:PATH=/usr/aarch64-linux-gnu ..
CMAKE_INSTALL_PREFIX:安装目录
OPENSSL_INCLUDE_DIR:openssl目录
CMAKE_PREFIX_PATH:指定查找目录
CMAKE_CXX_COMPILER:C++编译器目录
CMAKE_C_COMPILER:C编译器目录

3、编译安装

cmake --build .
sudo cmake --build . --target install

4、修改配置文件

vim ./src/libmongoc/CMakeLists.txt
target_link_libraries (${test}
         PRIVATE
            $<$<C_COMPILER_ID:MSVC>:DbgHelp.dll>
            $<$<PLATFORM_ID:Windows>:shlwapi>
            $<$<BOOL:${use_shared}>:mongoc_shared>
            $<$<NOT:$<BOOL:${use_shared}>>:mongoc_static>
            ${LIBRARIES}
            ${RESOLV_LIBRARIES} -lrt
      )

target_link_libraries (mongoc_shared PRIVATE ${LIBRARIES} PUBLIC ${BSON_LIBRARIES} -lrt)

【Linux】openssl交叉编译

1、下载解压源码

https://github.com/openssl/openssl/releases/download/openssl-3.1.0/openssl-3.1.0.tar.gz

2、编译配置

./Configure --prefix=/usr/lib/aarch64-linux-gnu/ --host=aarch64-linux  CC=aarch64-linux-gnu-gcc --openssldir=/usr/lib/aarch64-linux-gnu/ '-Wl,-rpath,$(LIBRPATH)'
./config no-asm shared no-async --prefix=$(pwd)/install --cross-compile-prefix=aarch64-linux-gnu-

3、编译安装

make
make install

4、arm平台错误

aarch64-linux-gnu-gcc: error: unrecognized command line option '-m64'

打开Makefile,去掉-m64

CNF_CFLAGS=-pthread -m64
CNF_CXXFLAGS=-std=c++11 -pthread -m64

【Linux】lksctp-tools交叉编译

编译平台:Ubuntu20.04 x86 amd64

目标平台:Ubuntu20.04 arm arrch64

1、软件库下载

wget https://github.com/sctp/lksctp-tools/archive/refs/tags/lksctp-tools-1.0.18.zip

解压进入目录

2、配置编译环境

sudo apt install automake
sudo apt install libtool

./bootstrap
./configure  --prefix=/usr/lib/aarch64-linux-gnu/ --host=aarch64-linux  CC=aarch64-linux-gnu-gcc

3、编译安装

make
make install

【Linux】DMA内存占用计算

1、查看内存页大小

root@Linux:~# getconf PAGESIZE
4096

2、查看DMA分配关系

root@Linux:~# cat /proc/buddyinfo
Node 0, zone      DMA      4      5      0      5      1      3      4      4      6      7    461
Node 0, zone   Normal    456   1982   1205    478    151     49     31     18     10      5   6732

3、计算DMA内存占用大小

每一行代表当前的内存区中连续1、2、4、8、16、32、64、128、256、512、1024个可使用空闲页的数量,当前系统默认的页大小为4K,所以分别对应的大小为1x4k、2x4k、4x4k、8x4k、16x4k、32x4k、64x4k、128x4k、256x4k=1M、512x4k=2M、1024x4k=4M,由此可以计算出:

DMA大小为:

3x4M+1x2M+1x1M+…=16M

DMA32大小为:

539x4M+22M+21M+…=2G

Normal大小为:

7043x4M+9x2M+6x1M+…=27G

【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)