分类 Ubuntu 下的文章

“Ubuntu是以桌面应用为主的Linux发行版,基于Debian。Ubuntu有三个正式版本,包括桌面版、服务器版及用于物联网设备和机器人的Core版。从17.10版本开始,Ubuntu以GNOME为默认桌面环境。 Ubuntu是著名的Linux发行版之一,也是目前最多用户的Linux版本。 ”

英语:board support package,简称 BSP

在嵌入式系统中,板级支持包(英语:board support package,简称 BSP)用作初始化与运行操作系统并用于评估板(Evaluation Board)的简易代码。它通常包含了以基础支持代码来加载操作系统的引导程序(英语:bootloader),以及主板上所有设备的驱动程序。

一些供应商还会提供一套根文件系统、用于构建运行在该嵌入式系统上的程序的工具链(英语:toolchain,可以是架构支持包的一部分),以及(在运行过程中)配置设备的实用工具。

完善的 Linux BSP,包括 Linux 内核源码、和开发工具等.

BSP包示例

软件资源说明
Linux 内核4.1.15
文件系统根文件系统采用 ext3,在根文件系统上可挂载多种文件系统,如: sysfs、yaffs2、ubifs 等
交叉编译器(内核)arm-poky-linux-gnueabi-gcc 5.3.0
交叉编译器(应用程序)arm-poky-linux-gnueabi-gcc 5.3.0动
eMMC驱动源码:/drivers/mmc/host/
SD/MMC驱动源码:/drivers/mmc/host/
LCD驱动源码:/drivers/video/fbdev/mxc/
触摸屏驱动源码:/drivers/input/touchscreen/
摄像头驱动源码:/drivers/media/platform/mxc/capture/
I2C驱动源码:/drivers/i2c/
UART驱动源码:/drivers/tty/serial
USB驱动源码:/drivers/usb
以太网驱动源码:/drivers/net/ethernet/freescale/
CAN驱动源码:/drivers/net/can
WIFI驱动源码:/drivers/net/wireless
PWM驱动源码:/drivers/pwm
GPIO驱动源码:/drivers/gpio
RTC驱动源码:/drivers/rtc
图形界面使用 QT5.12
示例程序提供串口、LED、网络、Web、数据库等开发例程
工具软件如系统镜像烧写工具、串口调试工具、网络调试工具、tftp 服务器软件等

二种方法,一是使用命令tzselect
二是直接复制相应文件替换/etc/localtime

示例

cp /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

tzselect 

Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
1) Africa 7) Europe
2) Americas 8) Indian Ocean
3) Antarctica 9) Pacific Ocean
4) Asia 10) coord - I want to use geographical coordinates.
5) Atlantic Ocean 11) TZ - I want to specify the timezone using the Posix TZ format.
6) Australia
4
Please select a country whose clocks agree with yours.
1) Afghanistan 10) Cyprus 19) Japan 28) Macau 37) Qatar 46) Turkmenistan
2) Armenia 11) East Timor 20) Jordan 29) Malaysia 38) Russia 47) United Arab Emirates
3) Azerbaijan 12) Georgia 21) Kazakhstan 30) Mongolia 39) Saudi Arabia 48) Uzbekistan
4) Bahrain 13) Hong Kong 22) Korea (North) 31) Myanmar (Burma) 40) Singapore 49) Vietnam
5) Bangladesh 14) India 23) Korea (South) 32) Nepal 41) Sri Lanka 50) Yemen
6) Bhutan 15) Indonesia 24) Kuwait 33) Oman 42) Syria
7) Brunei 16) Iran 25) Kyrgyzstan 34) Pakistan 43) Taiwan
8) Cambodia 17) Iraq 26) Laos 35) Palestine 44) Tajikistan
9) China 18) Israel 27) Lebanon 36) Philippines 45) Thailand
9
Please select one of the following timezones.
1) Beijing Time
2) Xinjiang Time
1

The following information has been given:

China
Beijing Time

Therefore TZ='Asia/Shanghai' will be used.
Selected time is now: 2021年 09月 01日 星期三 09:44:35 CST.
Universal Time is now: 2021年 09月 01日 星期三 01:44:35 UTC.
Is the above information OK?
1) Yes
2) No
1

You can make this change permanent for yourself by appending the line

TZ='Asia/Shanghai'; export TZ

to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai

对比一下/etc/localtime文件与/usr/share/zoneinfo/Asia下面文件异同。

md5sum /etc/localtime /usr/share/zoneinfo/Asia/Chongqing 

e50e09ceae59b878c8f8fc15c2e0209e /etc/localtime
e50e09ceae59b878c8f8fc15c2e0209e /usr/share/zoneinfo/Asia/Chongqing

二个文件是一样的,所以要设置为CST, 可以直接复制Chongqing到/etc/localtime

cp /usr/share/zoneinfo/Asia/Chongqing /etc/localtime

md5sum /usr/share/zoneinfo/PRC

e50e09ceae59b878c8f8fc15c2e0209e /usr/share/zoneinfo/PRC

PRC大家都知道表示共和国了。。

要设置为UTC时间,就复制/usr/share/zoneinfo/UTC替换/etc/localtime即可。

打印文件的十六进制数据用hexdump就可以了。也可以使用xxd.

示例:

hexdump -C certs/accert/ac.oer 

00000000 80 03 00 83 08 c7 95 5d 5e b0 fb 26 29 50 80 00 |.......]^..&)P..|
00000010 00 51 55 74 42 7f 2b 52 98 fe 6c 71 44 ba 00 0a |.QUtB.+R..lqD...|
00000020 21 0b b1 40 84 00 a9 83 01 01 80 00 9c 01 02 00 |!..@............|
00000030 01 6f 00 01 70 80 84 21 83 52 53 01 bc c2 2f 17 |.o..p..!.RS.../.|
00000040 d9 10 60 5a 03 32 3a e9 d4 eb 72 d7 f5 c1 15 bd |..`Z.2:...r.....|
00000050 99 84 a2 c2 27 a9 21 8e c0 84 40 ba 8d b1 6c 92 |....'.!...@...l.|
00000060 c6 41 b4 24 44 0d be ae 2e d4 4f 22 47 af 1b c2 |.A.$D.....O"G...|
00000070 bb 58 8b a2 db e8 b5 c7 03 20 b5 aa 15 22 53 83 |.X....... ..."S.|
00000080 73 22 7c f2 13 68 c9 2b 1f b5 22 37 f5 2e 30 81 |s"|..h.+.."7..0.|
00000090 55 a0 74 b1 38 d8 8b e2 f7 f4 d7 |U.t.8......|

xxd -p -u certs/accert/ac.oer 

8003008308C7955D5EB0FB262950800000515574427F2B5298FE6C7144BA
000A210BB1408400A983010180009C010200016F00017080842183525301
BCC22F17D910605A03323AE9D4EB72D7F5C115BD9984A2C227A9218EC084
40BA8DB16C92C641B424440DBEAE2ED44F2247AF1BC2BB588BA2DBE8B5C7
0320B5AA1522538373227CF21368C92B1FB52237F52E308155A074B138D8
8BE2F7F4D7

xxd -p -u -i certs/accert/ac.oer 

unsigned char certs_accert_ac_oer[] = {
0X80, 0X03, 0X00, 0X83, 0X08, 0XC7, 0X95, 0X5D, 0X5E, 0XB0, 0XFB, 0X26,
0X29, 0X50, 0X80, 0X00, 0X00, 0X51, 0X55, 0X74, 0X42, 0X7F, 0X2B, 0X52,
0X98, 0XFE, 0X6C, 0X71, 0X44, 0XBA, 0X00, 0X0A, 0X21, 0X0B, 0XB1, 0X40,
0X84, 0X00, 0XA9, 0X83, 0X01, 0X01, 0X80, 0X00, 0X9C, 0X01, 0X02, 0X00,
0X01, 0X6F, 0X00, 0X01, 0X70, 0X80, 0X84, 0X21, 0X83, 0X52, 0X53, 0X01,
0XBC, 0XC2, 0X2F, 0X17, 0XD9, 0X10, 0X60, 0X5A, 0X03, 0X32, 0X3A, 0XE9,
0XD4, 0XEB, 0X72, 0XD7, 0XF5, 0XC1, 0X15, 0XBD, 0X99, 0X84, 0XA2, 0XC2,
0X27, 0XA9, 0X21, 0X8E, 0XC0, 0X84, 0X40, 0XBA, 0X8D, 0XB1, 0X6C, 0X92,
0XC6, 0X41, 0XB4, 0X24, 0X44, 0X0D, 0XBE, 0XAE, 0X2E, 0XD4, 0X4F, 0X22,
0X47, 0XAF, 0X1B, 0XC2, 0XBB, 0X58, 0X8B, 0XA2, 0XDB, 0XE8, 0XB5, 0XC7,
0X03, 0X20, 0XB5, 0XAA, 0X15, 0X22, 0X53, 0X83, 0X73, 0X22, 0X7C, 0XF2,
0X13, 0X68, 0XC9, 0X2B, 0X1F, 0XB5, 0X22, 0X37, 0XF5, 0X2E, 0X30, 0X81,
0X55, 0XA0, 0X74, 0XB1, 0X38, 0XD8, 0X8B, 0XE2, 0XF7, 0XF4, 0XD7
};
unsigned int certs_accert_ac_oer_len = 155;

readlink 用于读取本进程的程序名 
eadlink()会将参数path的符号链接内容存储到参数buf所指的内存空间
头文件: #include <unistd.h>
定义函数:ssize_t  readlink(const  char path,  char buf, size_t  bufsiz);

readlink("/proc/self/exe", exepath, sizeof(exepath));
此技巧可以读取本进程的程序名。
示例:

#define MAX_PATH_LEN 256
string get_process_path()
{
    char process_path[MAX_PATH_LEN]={0};
    int n = 0;
    string strret = "";

    memset(process_path, 0x00, MAX_PATH_LEN);
    n = readlink("/proc/self/exe", process_path, MAX_PATH_LEN);
    if (n != -1)
    {        
        strret.append(process_path, n);
    }
    else
    {
        return strret;
    }
    return strret;
}

include<sys/time.h>

/ 需要的头文件 /

/将得到从linux epoch(1970年1月1日0点0分0秒,UTC格林威治时间)算起的总秒和微秒数。结构体struct timeval中tv_sec存储秒数,tv_usec存储微秒数。/
协调世界时
update:2021-9-6
协调世界时(英语:Coordinated Universal Time,法语:Temps Universel Coordonné,简称UTC)是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林威治标准时间。中华人民共和国采用ISO 8601:2000的国家标准GB/T 7408-2005《数据元和交换格式 信息交换 日期和时间表示法》中亦称之为协调世界时。

协调世界时是世界上调节时钟和时间的主要时间标准,它与0度经线的平太阳时相差不超过1秒,并不遵守夏令时。协调世界时是最接近格林威治标准时间(GMT)的几个替代时间系统之一。对于大多数用途来说,UTC时间被认为能与GMT时间互换,但GMT时间已不再被科学界所确定。

协调世界时(UTC)正式形成于1963年国际无线电咨询委员会的374号建议中,该建议由多国时间实验室共同提出。人们对该时间系统进行过数次调整,直到1972年引入了闰秒机制,调整工作得以简化。也有很多人提议用一个没有闰秒的时间系统来替换掉协调世界时,但目前尚未就此达成一致。

int gettimeofday(struct timeval * tv,struct timezone * tz);

/ 函数声明 /

结构体timeval的定义为:

struct timeval{
long int tv_sec; // 秒数

long int tv_usec; // 微秒数
}

其实gettimeofday()函数是用来获取时间的,而上面的两个结构体是通过gettimeofday函数获取秒和微秒的

#include <stdio.h>
#include <sys/time.h>

int main(void)
{
struct timeval tx;
gettimeofday(&tx,NULL);
printf(“获取的秒时间 = %ld 获取的微秒时间 =%ld\n”,tx.tv_sec,tx.tv_usec);

return 0;
}

毫秒用tx.tv_usec/1000即可,纳秒用tx.tv_usec*1000吧。