基于Ubuntu 18.04打造嵌入式arm开发环境

♧新版本的Ubuntu所使用的vmware工具更改为 “open-vm-tools”,安装该工具方便之后的操作。

sudo apt-get install open-vm-tools
sudo apt-get install open-vm-tools-desktop

首先安装基本工具:

 sudo apt install net-tools
 sudo apt-get install gcc
 sudo apt-get install vim
 sudo apt-get install make
 sudo apt-get install make-guile

安装Git工具:sudo apt install git

安装vim
1)安装
“sudo apt-get install vim”

2)配置vim
“sudo vi /etc/vim/vimrc.local”

set nu                           “显示行号”
set tabstop=4                    “制表符宽度”
set cindent                      “C/C++语言的自动缩进方式”
set shiftwidth=4                 “C/C++语言的自动缩进宽度”

配置arm开发环境。
更换ubuntu的更新源,要不升级更新太慢(推荐阿里云的源。)。
1)“sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup”
2)“sudo gedit /etc/apt/sources.list”
3)选择合适的源,把/etc/apt/sources.list里面的东西全部替换了
4)刷新列表“sudo apt-get update”
5)基本命令及环境的安装

安装命令tree
“sudo apt-get install tree”

安装patch命令
“sudo apt-get install patch”

安装基本的开发环境
“sudo apt-get install build-essential”

安装语法,词法分析器
“sudo apt-get install bison flex”

安装C函数库的man手册
“sudo apt-get install manpages-dev”

安装nfs服务
”sudo apt-get install nfs-kernel-server”

6)安装串口工具minicom
1、安装
“sudo apt-get install minicom”
2、配置
“sudo minicom -s”
主要是设置串口信息,按enter进入,将串口设备设置为/dev/ttyUSB0,设置波特率为115200,关流控,如下所示:
基于Ubuntu 18.04打造嵌入式arm开发环境_第1张图片

7)配置交叉编译链;
1、准备好交叉编译链的文件;
2、在 /usr/local的目录下新建一个文件夹 arm ;
3、修改环境变量;
修改/etc/profile文件,此文件对所有用户适用

sudo gedit /etc/profile

在最后加上export PATH=$PATH:/usr/local/arm/你的编译链的bin目录所在路径
保存,退出,然后刷新环境变量使其生效:

source /etc/profile

4、保存,退出,然后重启系统;
5、检查是否安装成功;
基于Ubuntu 18.04打造嵌入式arm开发环境_第2张图片

编译、安装DNW下载工具。
1)安装所依赖的库:sudo apt-get install libusb-dev
2)编译:gcc -o dnw2 dnw2.c -lusb (以下为dnw2.c代码)

/* dnw2 linux main file. This depends on libusb.
 *
 * Author: 	Fox 
 * License:	GPL
 *
 */
 
#include 
#include 
#include 
#include 
#include 
#include 

#define	 	QQ2440_SECBULK_IDVENDOR		0x5345
#define		QQ2440_SECBULK_IDPRODUCT	0x1234

struct usb_dev_handle * open_port()
{
	struct usb_bus *busses, *bus;

	usb_init();
	usb_find_busses();
	usb_find_devices();

	busses = usb_get_busses();
	for(bus=busses;bus;bus=bus->next)
	{
	 	struct usb_device *dev;
		for(dev=bus->devices;dev;dev=dev->next)
		{
			if( QQ2440_SECBULK_IDVENDOR==dev->descriptor.idVendor
			&&  QQ2440_SECBULK_IDPRODUCT==dev->descriptor.idProduct)
			{
				printf("Target usb device found!\n");
				struct usb_dev_handle *hdev = usb_open(dev);
				if(!hdev) 
				{
					perror("Cannot open device");	
				}
				else
				{
					if(0!=usb_claim_interface(hdev, 0))
					{
						perror("Cannot claim interface");
						usb_close(hdev);
						hdev = NULL;
					}
				}
				return hdev;
			}
		}
	}
	
	printf("Target usb device not found!\n");

	return NULL;
}

void usage()
{
	printf("Usage: dnw2 \n\n");
}

unsigned char* prepare_write_buf(char *filename, unsigned int *len)
{
	unsigned char *write_buf = NULL;
	struct stat fs;

	int fd = open(filename, O_RDONLY);
	if(-1==fd)
	{
		perror("Cannot open file");
		return NULL;
	}
	if(-1==fstat(fd, &fs))
	{
		perror("Cannot get file size");
		goto error;
	}
	write_buf = (unsigned char*)malloc(fs.st_size+10);
	if(NULL==write_buf)
	{
		perror("malloc failed");
		goto error;
	}

	if(fs.st_size != read(fd, write_buf+8, fs.st_size))
	{
		perror("Reading file failed");
		goto error;
	}

	printf("Filename : %s\n", filename);
	printf("Filesize : %d bytes\n", fs.st_size);

	*((u_int32_t*)write_buf) = 0x30000000;		//download address
	*((u_int32_t*)write_buf+1) = fs.st_size + 10;	//download size;

	*len = fs.st_size + 10;
	return write_buf;

error:
	if(fd!=-1) close(fd);
	if(NULL!=write_buf) free(write_buf);
	fs.st_size = 0;
	return NULL;
	
}

int main(int argc, char *argv[])
{
	if(2!=argc)
	{
		usage();
		return 1;
	}

	struct usb_dev_handle *hdev = open_port();
	if(!hdev)
	{
		return 1;
	}

	unsigned int len = 0;
	unsigned char* write_buf = prepare_write_buf(argv[1], &len);
	if(NULL==write_buf) return 1;

	unsigned int remain = len;
	unsigned int towrite;
	printf("Writing data ...\n");
	while(remain)
	{
		towrite = remain>512 ? 512 : remain; 
		if(towrite != usb_bulk_write(hdev, 0x03, write_buf+(len-remain), towrite, 3000))
		{
			perror("usb_bulk_write failed");
			break;
		}
		remain-=towrite;
		printf("\r%d%\t %d bytes     ", (len-remain)*100/len, len-remain);
		fflush(stdout);
	}
	if(0==remain) printf("Done!\n");
	return 0;
}

3)复制生成的dnw2到bin目录方便调用:sudo cp dnw2 /usr/local/bin
tip:赋值之后给权限 777 方便使用。

安装Wine工具,-to:安装 source insight 3.5
☆相关依赖文件:
sudo apt-get install gcc-multilib g+±multilib
sudo apt-get install xserver-xorg-dev:i386 libfreetype6-dev:i386
sudo apt-get install flex
sudo apt-get install bison
1)进入官网下载wine压缩包:https://www.winehq.org/
2)将下载好的wine压缩包解压后,进入该文件目录;
3)输入./configure进行配置;
4)配置完成后输入make进行编译;
5)执行make install进行安装。
6)安装完以后输入winecfg进入配置界面。

安装输入法:Sogou输入法。
1)安装Fcitx输入法框架

sudo apt install fcitx

2)进入搜狗输入法官网下载linux版本的搜狗输入法安装包;
3)安装

sudo dpkg -i  安装包名

4)若出现错误安装失败,执行以下命令再重新安装。

sudo apt-get install -f  

5)安装好之后进入系统设置将“Keyboard input method system:”切换为fcitx。
基于Ubuntu 18.04打造嵌入式arm开发环境_第3张图片
6)重启系统之后就可以进行输入法的切换了。

安装sublime test3编辑器。(注:下载好的*. tar.bz2压缩包解压之后就可以使用。)
1)去官网下编辑器:http://www.sublimetext.com/
2)导入License文件
打开Sublime菜单 -> help -> enter License (文件自行百度);
3)以前版本的sublime text需要汉化包进行汉化,更新后的可以通过localiza中文插件进行汉化。
基于Ubuntu 18.04打造嵌入式arm开发环境_第4张图片
4)使sublime text3可以输入中文。
1、保存下面的代码到文件sublime_imfix.c(位于~目录)

#include 
void gtk_im_context_set_client_window (GtkIMContext *context,
         GdkWindow    *window)
{
GtkIMContextClass *klass;
g_return_if_fail (GTK_IS_IM_CONTEXT (context));
klass = GTK_IM_CONTEXT_GET_CLASS (context);
if (klass->set_client_window)
   klass->set_client_window (context, window);
g_object_set_data(G_OBJECT(context),"window",window);
if(!GDK_IS_WINDOW (window))
   return;
int width = gdk_window_get_width(window);
int height = gdk_window_get_height(window);
if(width != 0 && height !=0)
   gtk_im_context_focus_in(context);
}

2、将上一步的代码编译成共享库libsublime-imfix.so,命令
cd ~
gcc -shared -o libsublime-imfix.so sublime_imfix.c pkg-config --libs --cflags gtk+-2.0 -fPIC (需要安装依赖文件)

3、然后将libsublime-imfix.so拷贝到sublime_text所在文件夹
4、修改文件/usr/bin/sublime_text的内容(具体视个人安装路径变动)

     sudo gedit /usr/bin/sublime_text
    将
    #!/bin/sh
     exec /opt/sublime_text/sublime_text "$@"
     修改为
    #!/bin/sh
     LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec     /opt/sublime_text/sublime_text "$@"

此时,在命令中执行 subl 将可以使用搜狗for linux的中文输入(注:此处修改时候要给权限 777“” sublime_text才可以执行)。
5、 为了使用鼠标右键打开文件时能够使用中文输入,还需要修改文件sublime_text.desktop的内容(没有的话新建即可,具体视个人安装路径变动)。
注意:
修改时请注意双引号"",否则会导致不能打开带有空格文件名的文件。
此处仅修改了/usr/share/applications/sublime-text.desktop,但可以正常使用了。
opt/sublime_text/目录下的sublime-text.desktop可以修改,也可不修改。(注意:后来出现了问题还是要修改这里)。

[Desktop Entry]
Version=1.0
Type=Application
Name=Sublime Text 3
GenericName=Text Editor
Comment=Sophisticated text editor for code,markup and prose
Exec=bash -c "LD_PRELOAD=/home/lin/App/sublime_text_3/libsublime-imfix.so exec /home/lin/App/sublime_text_3/sublime_text %F"
Terminal=false
MimeType=text/plain;
Icon=/home/lin/App/sublime_text_3/Icon/256x256/sublime-text.png
Categories=TextEdior;Development;Utility;
StartupNotify=ture
Actions=Window;Document;

X-Desktop-File-Install-Version=0.22

[Desktop Action Window]
Name=New Window
Exec=bash -c "LD_PRELOAD=/home/lin/App/sublime_text_3/libsublime-imfix.so exec /home/lin/App/sublime_text_3/sublime_text -n"
OnlyShowIn=Unity

[Desktop Action Document]
Name=New Window
Exec=bash -c "LD_PRELOAD=/home/lin/App/sublime_text_3/libsublime-imfix.so exec /home/lin/App/sublime_text_3/sublime_text --command new_file"

OnlyShowIn=Unity

♒以上就可以从零构建出来一个嵌入式arm在ubuntu 18.04的开发环境。

美化:
美化的话附上之前写的关于Ubuntu18.04美化的帖子工参考:https://blog.csdn.net/qq_33475105/article/details/81240488

你可能感兴趣的:(linux开发与学习相关,#,基于Ubuntu搭建开发环境)