学习linux嵌入式开发什么软件好?

学习linux嵌入式开发什么软件好?,第1张

用Linux平台就行了,C语言一定要学好,指针一定要明确,像指针数组、数组指针、指针函数、函数指针数组、函数返回值是个指针,结构体指针(主要是链表)、文件操作指针(FILE *其实是typedef结构体的指针)等,要灵活运用typedef 定义类型、灵活运用结构体。

再学习Linux的系统编程,主要是文件操作,文件描述符fd,对文件的操作write,read,open.close等,然后学习进程fork()vfork()创建进程和管理父子进程,进程之间的通信无名管道、命名管道、消息队列、共享内存、信号量、套接字等;都掌握之后要学线程以及线程的互斥和同步,线程之间共享进程的资源,就要对资源进行合理的分配,例如信号量sem和线程互斥锁pthread_mutex,信号是用来检测信号的ISGNAL的,常见的信号例如ctrl+c,中断前台的进程和kill中断后台的进程,如果对网络感兴趣,可以学习下Linux的网络套接子Socket,实现多台主机之间进程的通信,例如QQ和IPMSG都是对网络套接字的操作,熟悉一下TCP、UDP协议和TFTP、HTTP的网络层的传输协议,个人觉得解析buff最费时间,可以自己做一下IPMSG,单用户和并发server,echo服务器。

感兴趣GUI的可以学习一下C++和Qt,Qt被nokia收购,nokia被微软收购,Qt支持很多的平台,很实用,C++主要是对类的操作,和C中的结构体相似,class 类名{};// 声明类class 类名:继承方式 基类{};//继承类类中包含私有成员、公有成员、受保护的成员,类是对事物共性的一种抽象,对象是共性的一种实体化,是类的一个实例,老师的共性是:教书,吃饭,睡觉等,可以抽象成一个类,个性是年龄、性别、名字等,是老师类的一个实例,C++还有很多的内容,Qt是用C++来写的,其中的窗口都是派生于QWidget的,具体的不多说了。

学完C++和Qt,有了面向对象的概念后,可以去学Java和android系统,做手机的应用软件和游戏开发,和Java 和C++类似,去掉c++中指针部分,完全脱离了内存的操作,完全的面向对象,android和Qt类似,具体内容不多说了。

说说底层的吧:

底层主要用到的是C语言和arm汇编主要是v4版本以后的汇编标准语言,首先清楚底层是怎么引导Linux系统的,嵌入式很大一部分使用缩减版的Linux内核主要是稳定版本的,千万不要去追求最新,最适合的才是最好的,前部分由汇编语言引导C语言,主要设置开发板软硬件的环境,主要是bootloader(vivi、uboot.bin),然后把设置好的param参数传给内核,内核调用这些参数去找相应的文件,进行相应的操作,然后就是Linux的根文件系统了,最后是软件的移植。

用到的软件:vmplayer (Linux redenterp版)、windows下的超级终端,LSJF24X0.exe(下载bootloader时使用,也可以用H-Jtag)、tftpd32.exe(做windows下的server用,用于u-boot网线下载)等工具。

以上是个人的体会,仅供参考!

解决方案

1. 备份 SEPM 服务器注册表。

2. 将附录部分的注册表导出信息保存为 *.reg 文件。

注意: 如果SEPM安装在默认路径之外,请注意修改

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASANYs_sem5\Parameters]

中的 SEPM 安装路径为实际安装路径。

3. 双击 reg 文件导入注册表文件。

4. 完成后运行 regedit 打开注册表,确认

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASANYs_sem5] 项已经导入。

注意: 如果 SEPM 安装在默认路径之外,请注意修改

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASANYs_sem5\ImagePath]

为实际的 SEPM 安装路径。

5. 重新启动服务器操作系统,确认 Symantec Embedded Database 服务启动正常。

附录

将以下内容粘贴入记事本,并保存为 .reg 文件: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASANYs_sem5]

"Type"=dword:00000010

"Start"=dword:00000002

"ErrorControl"=dword:00000001

"ImagePath"=hex(2):43,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,\

20,00,46,00,69,00,6c,00,65,00,73,00,5c,00,53,00,79,00,6d,00,61,00,6e,00,74,\

00,65,00,63,00,5c,00,53,00,79,00,6d,00,61,00,6e,00,74,00,65,00,63,00,20,00,\

45,00,6e,00,64,00,70,00,6f,00,69,00,6e,00,74,00,20,00,50,00,72,00,6f,00,74,\

00,65,00,63,00,74,00,69,00,6f,00,6e,00,20,00,4d,00,61,00,6e,00,61,00,67,00,\

65,00,72,00,5c,00,41,00,53,00,41,00,5c,00,77,00,69,00,6e,00,33,00,32,00,5c,\

00,64,00,62,00,73,00,72,00,76,00,39,00,2e,00,65,00,78,00,65,00,20,00,2d,00,\

68,00,76,00,41,00,53,00,41,00,4e,00,59,00,73,00,5f,00,73,00,65,00,6d,00,35,\

00,00,00

"DisplayName"="Symantec Embedded Database"

"Group"="ASANYServer"

"ObjectName"="LocalSystem"

"Description"="Embedded database used by Symantec Endpoint Protection Manager."

"FailureActions"=hex:80,51,01,00,00,00,00,00,00,00,00,00,03,00,00,00,53,00,65,\

00,01,00,00,00,10,27,00,00,01,00,00,00,10,27,00,00,01,00,00,00,10,27,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASANYs_sem5\Parameters]

"arameters"="-c 64m -ch 64m -gp 8192 -gc 30 -gr 30 -o \"C:\\Program Files\\Symantec\\

Symantec Endpoint Protection Manager\\db\\out.log\" -oe \"C:\\Program Files\\Symantec\\

Symantec Endpoint Protection Manager\\db\\err.log\" -os 1m -gn 80 -n SPC_jl-w2k3-en3 \

"C:\\Program Files\\Symantec\\Symantec Endpoint Protection Manager\\db\\sem5.db\

" -n sem5 -sb 0 -x tcpip(localonly=yesport=263"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASANYs_sem5\Security]

"Security"=hex:01,00,14,80,b8,00,00,00,c4,00,00,00,14,00,00,00,30,00,00,00,02,\

00,1c,00,01,00,00,00,02,80,14,00,ff,01,0f,00,01,01,00,00,00,00,00,01,00,00,\

00,00,02,00,88,00,06,00,00,00,00,00,14,00,fd,01,02,00,01,01,00,00,00,00,00,\

05,12,00,00,00,00,00,18,00,ff,01,0f,00,01,02,00,00,00,00,00,05,20,00,00,00,\

20,02,00,00,00,00,14,00,8d,01,02,00,01,01,00,00,00,00,00,05,04,00,00,00,00,\

00,14,00,8d,01,02,00,01,01,00,00,00,00,00,05,06,00,00,00,00,00,14,00,00,01,\

00,00,01,01,00,00,00,00,00,05,0b,00,00,00,00,00,18,00,fd,01,02,00,01,02,00,\

00,00,00,00,05,20,00,00,00,23,02,00,00,01,01,00,00,00,00,00,05,12,00,00,00,\

01,01,00,00,00,00,00,05,12,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASANYs_sem5\Enum]

"0"="Root\\LEGACY_ASANYS_SEM5\\0000"

"Count"=dword:00000001

"NextInstance"=dword:00000001

OSSemPost()结束前会引发一次调度OS_Sched(),选择就绪表中优先级最高的任务运行,如果任务1的优先级高,会运行任务1,实时操作系统的任务都会被及时运行

void OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)

{

#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */

OS_CPU_SR cpu_sr

#endif

if (OSIntNesting >0) { /* See if called from ISR ...*/

*err = OS_ERR_PEND_ISR /* ... can't PEND from an ISR*/

return

}

#if OS_ARG_CHK_EN >0

if (pevent == (OS_EVENT *)0) {/* Validate 'pevent' */

*err = OS_ERR_PEVENT_NULL

return

}

if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type */

*err = OS_ERR_EVENT_TYPE

return

}

#endif

OS_ENTER_CRITICAL()

if (pevent->OSEventCnt >0) { /* If sem. is positive, resource available ... */

pevent->OSEventCnt--/* ... decrement semaphore only if positive. */

OS_EXIT_CRITICAL()

*err = OS_NO_ERR

return

}

/* Otherwise, must wait until event occurs */

OSTCBCur->OSTCBStat |= OS_STAT_SEM /* Resource not available, pend on semaphore */

OSTCBCur->OSTCBDly = timeout /* Store pend timeout in TCB */

OS_EventTaskWait(pevent)/* Suspend task until event or timeout occurs*/

OS_EXIT_CRITICAL()

OS_Sched() /* Find next highest priority task ready */

OS_ENTER_CRITICAL()

if (OSTCBCur->OSTCBStat &OS_STAT_SEM) { /* Must have timed out if still waiting for event*/

OS_EventTO(pevent)

OS_EXIT_CRITICAL()

*err = OS_TIMEOUT /* Indicate that didn't get event within TO */

return

}

OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0

OS_EXIT_CRITICAL()

*err = OS_NO_ERR

}


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/199227.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-01
下一篇2023-04-01

发表评论

登录后才能评论

评论列表(0条)

    保存