1.mysql-odbc编译
2.手把手教你搭建ARM64 QEMU环境
3.å¦ä½ç¼è¯android userdata.img
4.initrdåinitramfsçåºå«
mysql-odbc编译
近期工作中需要编译mysql-odbc的源码驱动库,以下为遇到的源码问题及解决方法。
首先,源码参照官网指南进行操作:MySQL :: MySQL Connector/ODBC Developer Guide :: 4.5 Building Connector/ODBC from a Source Distribution on Unix。源码
由于之前未接触过,源码对基本概念不甚了解。源码avalonjs项目源码
首先,源码需要配置好依赖项目,源码如libmysqlclient.a。源码系统配置中需包含iodb或unixODBC。源码指南中已明确说明。源码
为使用静态库,源码我下载了mysql-8.0.编译的源码libmysqlclient库。
解压.src.rpm文件:命令 rpm2cpio ***.src.rpm | cpio -idv。源码
解压后,源码会有对应版本的mysql-8.0..tar.gz。注意,这里有boost版本,编译时可能需要指定boost路径。创建build目录,进入build目录后进行以下操作:
cmake -DWITH_BOOST="/root/lq_workspace/mysql-5.7./boost" ../
然后执行make和make install。巅峰西游源码注意mysql的安装路径,以便后续编译odbc时使用。例如,我将其放置在/usr/local/mysql/lib中。
接下来,开始编译ODBC:
1. 下载源码,注意编译版本所需的gcc和g++版本。我选择较低版本,非最新版本。
2. 解压后,汽修php源码创建build路径,开始编译。注意以下参数:
cmake ../ -DWITH_UNIXODBC=1 -DDISABLE_GUI=1 -DMYSQL_DIR="/usr/local/mysql/" -DMYSQLCLIENT_STATIC_LINKING=true
编译时出现定义冲突,我将CMakeLists.txt中不需要的部分屏蔽。
cmake时-DWITH_UNIXODBC=1指定使用unixOdbc,默认为iodbc,需在系统上先配置。
-DMYSQL_DIR="/usr/local/mysql/"表示安装libmysqlclient的路径。
-DMYSQLCLIENT_STATIC_LINKING=true连接静态库,默认为动态库。尾盘偷袭源码
构建完成后,提示连接libmysqlclient_r.a,低版本区分多线程支持,高版本无需区分。为连接,创建软连接:
ln -s /usr/local/mysql/lib/libmysqlclient.a /usr/local/mysql/lib/libmysqlclient_r.a
准备完成后,执行make生成所需odbc驱动。
配置mysqlodbc后,即可连接mysql。
总结:编译源码时,源码压缩失败会遇到各种版本依赖问题,需逐一排查。同时,编译时的编译可选项作用也不容忽视。
手把手教你搭建ARM QEMU环境
在上篇介绍了ARM QEMU环境搭建过程后,让我们继续学习如何搭建ARM QEMU开发环境。 首先,准备开发环境:你的PC系统:Windows
虚拟机软件:VMware
虚拟机操作系统:Ubuntu .
目标模拟的位CPU:Cortex-A
使用版本:qemu-8.2.0、Linux Kernel 5..和busybox-1..1
构建步骤如下:从qemu官网下载并解压qemu-8.2.0源码。
确保你的主机Python版本大于3.8,如需升级,访问python官网下载源码。
安装所需的Python依赖和glib2.0环境。
进入qemu目录,配置源码,创建编译目录并进行配置。
从kernel.org获取Linux kernel 5.源码,解压并编译生成Image文件。
同时,编译kernel modules,存放在指定目录。
使用busybox制作根文件系统:下载最新版本源码,设置交叉编译工具链,重新配置并安装。
创建rootfs目录,将busybox安装内容复制到其中,包括设置环境变量和设备节点。
在/etc/init.d/rcS脚本中,rcS会挂载文件系统、处理热插拔和设置eth0的静态IP。
理解并配置其他配置文件如/etc/fstab和/etc/profile。
如果需要,可以尝试基于ram的内存文件系统,使用cpio工具制作initramfs或gzip压缩。
如果需要持久化,制作基于硬盘的文件系统。
最后,使用qemu命令启动内核并通过串口登录。
对于更详细的步骤和示例,可以参考我的文章《Linux随笔录》,回复关键字"busybox"获取相关资源。作者潘小帅,热衷于Linux底层技术,喜欢分享原创文章,也欢迎关注微信公众号Linux随笔录,一同探讨技术与生活。感谢您的支持和关注!å¦ä½ç¼è¯android userdata.img
1ãandroidæ件系ç»çç»æ
androidæºç ç¼è¯åå¾å°system.img,ramdisk.img,userdata.imgæ åæ件ãå ¶ä¸ï¼ ramdisk.imgæ¯emulatorçæ件系ç»ï¼system.imgå æ¬äºä¸»è¦çå ãåºçæ件ï¼userdata.imgå æ¬äºä¸äºç¨æ·æ°æ®ï¼emulatorå è½½è¿3个æ åæ件åï¼ä¼æ systemå userdataåå«å è½½å° ramdiskæ件系ç»ä¸çsystemå userdataç®å½ä¸ãå æ¤ï¼æ们å¯ä»¥æramdisk.imgéçæææ件å¤å¶åºæ¥ï¼system.imgåuserdata.imgåå«è§£åå° ramdiskæ件系ç»ä¸çsystemå userdataç®å½ä¸ã
2ãå离androidæ件系ç»åºæ¥
system.img,ramdisk.img,userdata.imgæ åæ件æ¯éç¨cpioæå ãgzipå缩çï¼å¯ä»¥éè¿fileå½ä»¤éªè¯ï¼
file ramdisk.imgï¼è¾åºï¼
ramdisk.img: gzip compressed data, from Unix, last modified: Wed Mar ::
Androidæºç ç¼è¯åé¤äºçæsystem.imgï¼userdata.imgä¹å¤è¿çæsystemå userdataæ件夹ï¼å æ¤ä¸éè¦è§£åå®ä»¬ãAndroidæºç ç¼è¯åè¿çærootæ件夹ï¼å ¶å®rootä¸çæä»¶ä¸ ramdisk.img éçæ件æ¯ä¸æ ·çï¼ä¸è¿è¿éè¿æ¯ä»ç»ææ ·æ ramdisk.img解ååºæ¥:
å°ramdisk.imgå¤å¶ä¸ä»½å°ä»»ä½å ¶ä»ç®å½ä¸ï¼å°å ¶å称æ¹ä¸ºramdisk.img.gzï¼å¹¶ä½¿ç¨å½ä»¤
gunzip ramdisk.img.gz
ç¶åæ°å»ºä¸ä¸ªæ件夹ï¼å«ramdiskå§ï¼è¿å ¥ï¼è¾å ¥å½ä»¤
cpio -i -F ../ramdisk.img
è¿ä¸ï¼ä½ å°±è½çè§å¹¶æä½ramdiskéé¢çå 容äºã
ç¶åæAndroidæºç ç¼è¯åçæçsystemå userdataéçæ件å¤å¶å° ramdisk/systemå ramdisk/userdataä¸ãè¿æ ·å°±å¾å°ä¸ä¸ªæ件系ç»äºã
3ã使ç¨ç½ç»æ件系ç»æ¹å¼æè½½androidæ件系ç»
å æ¤ï¼æ们éè¦å»ºç«/nfsrootç®å½ï¼å建ç«/nfsroot/androidfsç®å½ï¼æåæçandroidæ件系ç»æ¹å为androidfsï¼å¹¶é¾æ¥å°/nfsroot/androidfs
4ãandroidå æ ¸å¼å¯¼æ件系ç»
androidå æ ¸æè½½/nfsroot/androidfsä¹åï¼æ ¹æ®init.rc,init.goldfish.rcæ¥åå§åå¹¶è£ è½½ç³»ç»åºãç¨åºçç´å°å¼æºå®æãinit.rcèæ¬å æ¬äºæ件系ç»åå§åãè£ è½½ç许å¤è¿ç¨ãinit.rcçå·¥ä½ä¸»è¦æ¯ï¼
1ï¼è®¾ç½®ä¸äºç¯å¢åé
2ï¼å建systemãsdcardãdataãcacheçç®å½
3ï¼æä¸äºæ件系ç»mountå°ä¸äºç®å½å»ï¼å¦ï¼mount tmpfs tmpfs /sqlite_stmt_journals
4ï¼è®¾ç½®ä¸äºæ件çç¨æ·ç¾¤ç»ãæé
5ï¼è®¾ç½®ä¸äºçº¿ç¨åæ°
6ï¼è®¾ç½®TCPç¼å大å°
initrdåinitramfsçåºå«
Linuxå æ ¸å¨åå§åä¹åä¼æ§è¡initè¿ç¨ï¼èinitè¿ç¨ä¼æè½½æ们çæ ¹æ件系ç»ï¼ä½ç±äºinitç¨åºä¹æ¯å¨æ ¹æ件系ç»ä¸çï¼æ以è¿å°±æäºæ论ãLinuxéç¨ä¸¤æ¥èµ°çæ¹æ³æ¥è§£å³è¿ä¸ªé®é¢ã
Linux2.6ç以åçæ¹æ³æ¯ï¼é¤äºå æ ¸vmlinuzä¹å¤è¿æä¸ä¸ªç¬ç«çinitrd.imgæ åæ件ï¼å ¶å®å®å°±æ¯ä¸ä¸ªæ件系ç»æ åï¼linuxå æ ¸å¨åå§ååä¼mount initrd.imgä½ä¸ºä¸ä¸ªä¸´æ¶çæ ¹æ件系ç»ï¼èinitè¿ç¨å°±æ¯å¨initrd.imgéçï¼ç¶åinitè¿ç¨ä¼æè½½çæ£çæ ¹æ件系ç»ï¼ç¶åumount initrd.imgãä½Linux2.6å æ ¸çå®ç°æ¹å¼å´ä¸å¤ªä¸æ ·ï¼è½ç¶å®æçåè½æ¯ä¸æ ·çãLinux2.6éç¨initramfsã
initramfsï¼init ram filesystemï¼å®æ¯ä¸ä¸ªcpioæ ¼å¼çå åæ件系ç»ï¼å¶ä½çæ¹æ³æ两个ï¼ä¸ä¸ªæ¯ä»ç»çï¼ä½è¿æ ·ååºæ¥çinitramfsæ¯åå æ ¸vmlinuzåå¼çï¼å æ¤æ们éè¦å¨grubéåä¸initramfsçè·¯å¾ãèå¦ä¸ç§æ¹æ³æ¯æå æ ¸åinitramfså¶ä½å¨ä¸èµ·æ为ä¸ä¸ªæ件ï¼æ¹æ³æ¯å¨linuxæºç make menuconfigï¼ç¶åGeneral setup-->éæ©Initial RAM filesystem and RAM disk (initramfs/initrd) supportï¼ç¶åå¨Initramfs source file(s)éè¾å ¥æ们çinitramfsç®å½ï¼ç¶åmake bzImageãè¿ç§æ¹æ³ååºæ¥çå æ ¸å°±åªæä¸ä¸ªæ件ï¼ä¸éè¦æå®initramfsäºã