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

【IMG】创建和修改镜像内容

一、创建新镜像文件

1、创建镜像文件

使用dd命令创建一个空的镜像文件rootfs.img,每次读取和写入的字节数是1M,大小为1M*2048;大小可根据自己需要保存文件的多少自定义。

$ dd if=/dev/zero of=rootfs.img bs=1M count=2048

2、格式化镜像文件

格式化镜像文件rootfs.img为ext4格式,具体格式化的类型还有ext3、ntfs、fat等格式可自定义。

$ mkfs.ext4 -c rootfs.img  

3、挂载镜像文件

挂载镜像文件rootfs.img到/mnt目录中。具体挂载的目录可以自定义。

$ sudo mount -t ext4 -o loop rootfs.img /mnt

4、拷贝文件到镜像

拷贝需要打包到镜像中的文件到挂载的目录中,此处表示拷贝rootfs/下的所有文件到/mnt目录中(即镜像文件中)。
$ sudo cp -rfp rootfs/* /mnt

5、取消挂载

取消镜像文件的挂载。取消挂载后就表示镜像文件制作完成。

$ sudo umount /mnt

二、修改镜像文件

1、查看镜像分区

fdisk *.img
xiaobao@Newu:~/hdd/tmp$ fdisk AB-small-S-lvm-A03-other-armbian-1.1.100.57.9.img

Welcome to fdisk (util-linux 2.34).
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 AB-small-S-lvm-A03-other-armbian-1.1.100.57.9.img: 2.77 GiB, 2956984320 bytes, 5775360 sectors
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: 0x00000000

Device                                             Boot  Start     End Sectors  Size Id Type
AB-small-S-lvm-A03-other-armbian-1.1.100.57.9.img1        8192  530431  522240  255M  c W95 FAT32 (LBA)
AB-small-S-lvm-A03-other-armbian-1.1.100.57.9.img2      532480 5775359 5242880  2.5G 83 Linux

2、挂载分区

sudo mount -o loop,offset=4194304 AB-small-S-lvm-A03-other-armbian-1.1.100.57.9.img /mnt/tmp/

可以看到img文件中有两个分区,第一个分区是从8192开始的,这里需要特别注意,需要转换一下:8192*512=4194304B

3、替换内容

$ sudo cp -rfp rootfs/* /mnt/tmp/

三、硬盘导出镜像工具

【Linux】lvgl交叉编译环境配置

CC =  arm-linux-gnueabihf-gcc#这里使用你板子编译的gcc最好指定有路径的更明确
LVGL_DIR ?= $(shell pwd)/..#创建lvgl的根目录
LVGL_DIR_NAME ?= lvgl
CFLAGS ?= -O3 -g0 -I$(LVGL_DIR)/
LDFLAGS ?= -lm -lpthread
BIN = bbu_base_func
MAINSRC = ../main.c ../tcp_server.c ../lx2160_fan.c ../lx2160_tmp.c ../lxspi_gd32.c ../clk_sync.c
include $(LVGL_DIR)/lvgl/lvgl.mk
include $(LVGL_DIR)/lv_drivers/lv_drivers.mk
OBJEXT ?= .o
AOBJS = $(ASRCS:.S=$(OBJEXT))
COBJS = $(CSRCS:.c=$(OBJEXT))
MAINOBJ = $(MAINSRC:.c=$(OBJEXT))
SRCS = $(ASRCS) $(CSRCS) $(MAINSRC)
OBJS = $(AOBJS) $(COBJS)

all: default

%.o: %.c
        @$(CC)  $(CFLAGS) -c $(INCLUDES) $< -o $@
        @echo "CC $<"

default: $(AOBJS) $(COBJS) $(MAINOBJ)
        $(CC) -static -o $(BIN) $(MAINOBJ) $(AOBJS) $(COBJS) $(LDFLAGS)
        cp $(BIN) ../
clean:
        rm -f $(BIN) $(AOBJS) $(COBJS) $(MAINOBJ)

【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