CN111611016B - 一种基于时空隔离域加载MicroPython的方法 - Google Patents
一种基于时空隔离域加载MicroPython的方法 Download PDFInfo
- Publication number
- CN111611016B CN111611016B CN202010447609.9A CN202010447609A CN111611016B CN 111611016 B CN111611016 B CN 111611016B CN 202010447609 A CN202010447609 A CN 202010447609A CN 111611016 B CN111611016 B CN 111611016B
- Authority
- CN
- China
- Prior art keywords
- micropython
- space
- domain
- configuring
- time
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4416—Network booting; Remote initial program loading [RIPL]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于时空隔离域加载MicroPython的方法,包括如下步骤:(1)将MicroPython以域服务模块形式加载并运行;(2)配置MicroPython运行时所需的多线程机制和线程调度;(3)配置MicroPython运行时所需的文件系统;(4)配置MicroPython运行时所需的IO设备管理;(5)配置MicroPython运行时所需的网络协议栈;(6)配置MicroPython运行时所需的RTC;(9)配置MicroPython运行时所需的标准输入、输出。本发明通过将MicroPython以域服务模块形式加载并运行,并在时空隔离域中配置了MicroPython运行所需的各类资源,从而解决了如何将MicroPython运行于时空隔离域中的问题。
Description
技术领域
本发明涉及信息技术领域,尤其是一种基于时空隔离域加载MicroPython的方法。
背景技术
MicroPython是Python3编程语言的一种精简而高效的实现,它包含Python标准库的一个子集,运行于裸金属系统或嵌入式系统中。通过MicroPython实现硬件底层的访问和控制,不需要了解底层寄存器、数据手册、厂家的库函数等,即可轻松控制硬件。外设与常用功能都有相应的模块,降低开发难度,使开发和移植变得容易和快速。
目前支持MicroPython的嵌入式系统都是将MicroPython作为一个服务组件与其他服务、应用运行在同一个系统空间。MicroPython可作为主要应用或作为次要应用与实时应用一同运行。
但随着应用复杂度逐渐升高,应用任务越来越多,且绝大部分实时应用能优先抢占CPU,将无法保障MicroPython的执行时间。因此为了保障MicroPython的执行时间,应将MicroPython运行于时空隔离域中。而MicroPython并不是基于时空隔离域开发的,因此现有的MicroPython无法直接运行于时空隔离域中。
发明内容
本发明所要解决的技术问题是:针对如何将MicroPython运行于时空隔离域中的问题,提供一种基于时空隔离域加载MicroPython的方法。
本发明采用的技术方案如下:
一种基于时空隔离域加载MicroPython的方法,包括如下步骤:
(1)将MicroPython以域服务模块形式加载并运行;
(2)配置MicroPython运行时所需的多线程机制和线程调度;
(3)配置MicroPython运行时所需的文件系统;
(4)配置MicroPython运行时所需的IO设备管理;
(5)配置MicroPython运行时所需的网络协议栈;
(6)配置MicroPython运行时所需的RTC;
(7)配置MicroPython运行时所需的标准输入、输出。
具体地,所述MicroPython以域服务模块形式,通过以下两种方式加载并运行:
(1.1)静态加载:MicroPython作为静态库链接到时空隔离域的域镜像中,当内核加载时空隔离域时将MicroPython与其他域服务模块一同运行;
(1.2)动态加载:MicroPython作为动态库,也即一个独立的模块镜像,在时空隔离域启动后,再动态加载到内存中运行。
具体地,所述配置MicroPython运行时所需的多线程机制和线程调度的方法包括步骤(2.1)~(2.5):
(2.1)将MicroPython的多线程功能为以下4类:线程管理、线程调度、线程锁管理和线程中断;
(2.2)线程管理由时空隔离域的任务管理抽象实现;
(2.3)线程调度由时空隔离域的任务调度抽象实现;
(2.4)线程锁管理由时空隔离域的互斥锁抽象实现;
(2.5)线程中断由时空隔离域的软中断抽象实现。
具体地,所述配置MicroPython运行时所需的文件系统的方法为:MicroPython支持的文件访问包括4类标准接口:open、read、write、close;当MicroPython调用文件访问的标准接口时,将直接访问时空隔离域提供的对应接口。
具体地,所述配置MicroPython运行时所需的IO设备管理的方法为:时空隔离域内需要初始化IO设备,将IO设备注册管理,并提供IO设备的访问接口:open、read、write、ioctl、close;当MicroPython访问IO设备时,将调用时空隔离域的多个IO设备访问接口,执行对应的IO操作。
具体地,所述配置MicroPython运行时所需的网络协议栈的方法为:时空隔离域内需要初始化网络协议栈,当MicroPython调用BSD socket接口时,将调用时空隔离域的网络协议栈对应接口,执行对应的操作。
具体地,所述配置MicroPython运行时所需的RTC的方法为:时空隔离域需要从内核获取当前的RTC,并独立的管理RTC偏移;当MicroPython访问RTC时,将调用时空隔离域对应的RTC接口,同时加上RTC偏移完成访问。
具体地,所述配置MicroPython运行时所需的标准输入、输出的方法为:
a)MicroPython使用stdin时,将从时空隔离域的stdin输入数据;
b)MicroPython使用stdout时,将信息输出到时空隔离域的stdout;
c)MicroPython使用stderr时,错误信息将输出到时空隔离域的stderr。
综上所述,由于采用了上述技术方案,本发明的有益效果是:
本发明通过将MicroPython以域服务模块形式加载并运行,并在时空隔离域中配置了MicroPython运行所需的各类资源,从而解决了如何将MicroPython运行于时空隔离域中的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明的基于时空隔离域加载MicroPython的方法的流程框图。
图2为本发明的MicroPython在时空隔离域中的加载方式示意图。
图3为本发明的MicroPython在时空隔离域中静态加载的示意图。
图4为本发明的MicroPython在时空隔离域中动态加载的示意图。
图5为本发明的实现MicroPython的多线程机制的示意图。
图6为本发明的实现MicroPython的文件系统的示意图。
图7为本发明的实现MicroPython的IO设备管理的示意图。
图8为本发明的实现MicroPython的网络协议栈的示意图。
图9为本发明的实现MicroPython的RTC的示意图。
图10为本发明的实现MicroPython的标准输入、输出的示意图。
具体实施方式
以下结合实施例对本发明的特征和性能作进一步的详细描述。
如图1所示,本实施例的一种基于时空隔离域加载MicroPython的方法,包括如下步骤:
(1)将MicroPython以域服务模块形式加载并运行;
如图2所示,在时空隔离域内,为了隔离保护系统内核,APP是无法直接访问内核的,为了支撑APP的运行,需要提供各类服务,MicroPython将以域服务模块形式与其他域服务模块一同加载并运行。
具体地,所述MicroPython以域服务模块形式,通过以下两种方式加载并运行:
(1.1)静态加载:MicroPython作为静态库链接到时空隔离域的域镜像中,当内核加载时空隔离域时将MicroPython与其他域服务模块一同运行;
当所述MicroPython以静态加载方式加载时,将MicroPython编译为一个静态库,在时空隔离域的初始化过程中直接调用MicroPython的初始化函数。在编译时空隔离域时,直接链接MicroPython静态库,形成一个完整的时空隔离域镜像,如图3所示。
在内核加载时空隔离域时,将时空隔离域镜像搬移到运行空间,当时空隔离域运行初始化时,通过链接的函数直接运行MicroPython的初始化函数,完成MicroPython的初始化,并将MicroPython与其他域服务模块一同运行。
在时空隔离域完成初始化后,MicroPython的APP以字节码方式被加载到时空隔离域中,加载APP后,时空隔离域将调用MicroPython的执行器,执行APP。
(1.2)动态加载:MicroPython作为动态库,也即一个独立的模块镜像,在时空隔离域启动后,再动态加载到内存中运行。
当所述MicroPython以动态加载方式加载时,将MicroPython编译为一个动态库,也即一个独立的二进制。时空隔离域的初始化过程并不调用MicroPython的初始化函数。在编译时空隔离域时,也不链接MicroPython,而是链接MicroPython的桩库,如图4所示。
当时空隔离域加载MicroPython的APP后,时空隔离域调用MicroPython的初始化桩函数。MicroPython的初始化桩函数内动态地将MicroPython动态库加载到运行空间,并调用真正的MicroPython初始化函数。随后时空隔离域继续调用MicroPython的执行器,执行APP。
(2)配置MicroPython运行时所需的多线程机制和线程调度;
MicroPython是支持多线程的,要在时空隔离域中支持MicroPython的多线程,需要提供多线程机制,即对应时空隔离域的多任务机制。如图5所示,本实施例通过时空隔离域的多任务机制来抽象实现MicroPython的多线程机制,具体包括步骤(2.1)~(2.5):
(2.1)将MicroPython的多线程功能进行归类;
MicroPython的多线程功能包括:
a)Errno;
b)创建线程(启动线程时使用);
c)中断主线程;
d)删除线程(线程退出时使用);
e)分配线程锁;
f)线程切换(线程退出时使用);
g)获取线程标识符;
h)获取、设置线程栈大小;
i)设置获取线程锁的超时时间;
j)线程锁;
将MicroPython的多线程功能归类为以下4类:
线程管理,包括Errno,创建线程(启动线程时使用),删除线程(线程退出时使用),获取线程标识符,获取、设置线程栈大小功能;
线程调度,包括创建线程(启动线程时使用)和线程切换(线程退出时使用)功能。
线程锁管理,包括分配线程锁、设置获取线程锁的超时时间和线程锁功能;
线程中断,包括中断主线程功能。
(2.2)线程管理由时空隔离域的任务管理抽象实现,实现了Errno,创建线程(启动线程时使用),删除线程(线程退出时使用),获取线程标识符,获取、设置线程栈大小功能。
(2.3)线程调度由时空隔离域的任务调度抽象实现,实现了创建线程(启动线程时使用)和线程切换(线程退出时使用)功能。
线程管理和线程调度的实现具体如下:
a)由任务管理的Errno直接实现为MicroPython线程的Errno;
b)MicroPython启动线程时,将调用任务管理的创建线程接口创建一个任务作为MicroPython线程的执行体;然后利用任务调度,启动任务的运行;
c)MicroPython线程退出时,将任务管理的删除任务接口来删除任务资源,然后利用任务调度(非接口调用),切换到其他MicroPython线程对应的任务;
d)MicroPython获取线程标识符和获取、设置线程栈大小,则直接调用任务管理中获取任务标识和获取、设置任务栈大小的接口。
(2.4)线程锁管理由时空隔离域的互斥锁抽象实现,实现了分配线程锁、设置获取线程锁的超时时间和线程锁功能;具体地:
a)MicroPytho分配线程锁时,调用创建互斥锁的接口,创建互斥锁;
b)MicroPython设置获取线程锁的超时时间时,将时空隔离域记录超时时间,待调用MicroPython调用获取线程锁时,按记录的超时时间等待;
c)MicroPython调用线程锁操作时,将调用时空隔离域的互斥锁对应的操作。
(2.5)线程中断由时空隔离域的软中断抽象实现,实现了中断主线程功能;具体地:
MicroPython线程执行中断主线程时,将调用时空隔离域的发送软中断接口,触发一个软中断,然后由MicroPython主线程对应的任务执行软中断处理函数。
(3)配置MicroPython运行时所需的文件系统;
如图6所示,MicroPython支持文件访问,由时空隔离域提供文件系统服务用于支撑MicroPython的文件访问;
即:MicroPython支持的文件访问包括4类标准接口:open、read、write、close;当MicroPython调用文件访问的标准接口时,将直接访问时空隔离域提供的对应接口。
(4)配置MicroPython运行时所需的IO设备管理;
如图7所示,MicroPython支持访问IO设备,如UART、CAN、I2C、GPIO、SPI等,时空隔离域将提供IO设备管理,用于管理所有IO设备。
即:时空隔离域内需要初始化IO设备,将IO设备注册管理,并提供IO设备的访问接口:open、read、write、ioctl、close;当MicroPython访问IO设备时,将调用时空隔离域的多个IO设备访问接口,执行对应的IO操作。
(5)配置MicroPython运行时所需的网络协议栈;
如图8所示,MicroPython支持BSD socket接口,如socket、bind、listen、send、recv、close等,时空隔离域将提供网络协议栈,用于支撑BSD socket接口。
即:时空隔离域内需要初始化网络协议栈,当MicroPython调用BSD socket接口时,将调用时空隔离域的网络协议栈对应接口,执行对应的操作。
(6)配置MicroPython运行时所需的RTC;
如图9所示,MicroPython支持访问RTC时间,如asctime、gmtime、localtime、mktime、time等,时空隔离域将提供RTC,用于支撑MicroPython访问RTC。
即:时空隔离域需要从内核获取当前的RTC,并独立的管理RTC偏移;当MicroPython访问RTC时,将调用时空隔离域对应的RTC接口,同时加上RTC偏移完成访问。
(7)配置MicroPython运行时所需的标准输入、输出;
如图10所示,MicroPython需要使用stdin、stdout和stderr,时空隔离域将提供抽象的stdin、stdout和stderr,用于支撑MicroPython的运行;即:
a)MicroPython使用stdin时,将从时空隔离域的stdin输入数据;
b)MicroPython使用stdout时,将信息输出到时空隔离域的stdout;
c)MicroPython使用stderr时,错误信息将输出到时空隔离域的stderr。
通过上述内容可知,本发明通过将MicroPython以域服务模块形式加载并运行,并在时空隔离域中配置了MicroPython运行所需的各类资源,从而解决了如何将MicroPython运行于时空隔离域中的问题。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (1)
1.一种基于时空隔离域加载MicroPython的方法,其特征在于,包括如下步骤:
(1)将MicroPython以域服务模块形式加载并运行;
(2)配置MicroPython运行时所需的多线程机制和线程调度;
(3)配置MicroPython运行时所需的文件系统;
(4)配置MicroPython运行时所需的IO设备管理;
(5)配置MicroPython运行时所需的网络协议栈;
(6)配置MicroPython运行时所需的RTC;
(7)配置MicroPython运行时所需的标准输入和输出;
所述MicroPython以域服务模块形式,通过以下两种方式加载并运行:
(1.1)静态加载:MicroPython作为静态库链接到时空隔离域的域镜像中,当内核加载时空隔离域时将MicroPython与其他域服务模块一同运行;
(1.2)动态加载:MicroPython作为动态库,也即一个独立的模块镜像,在时空隔离域启动后,再动态加载到内存中运行;
所述配置MicroPython运行时所需的多线程机制的方法包括步骤(2.1)~(2.5):
(2.1)将MicroPython的多线程功能为以下4类:线程管理、线程调度、线程锁管理和线程中断;
(2.2)线程管理由时空隔离域的任务管理抽象实现;
(2.3)线程调度由时空隔离域的任务调度抽象实现;
(2.4)线程锁管理由时空隔离域的互斥锁抽象实现;
(2.5)线程中断由时空隔离域的软中断抽象实现;
所述配置MicroPython运行时所需的文件系统的方法为:MicroPython支持的文件访问包括4类标准接口:open、read、write和close;当MicroPython调用文件访问的标准接口时,将直接访问时空隔离域提供的对应接口;
所述配置MicroPython运行时所需的IO设备管理的方法为:时空隔离域内需要初始化IO设备,将IO设备注册管理,并提供IO设备的访问接口:open、read、write、ioctl和close;当MicroPython访问IO设备时,将调用时空隔离域的多个IO设备访问接口,执行对应的IO操作;
所述配置MicroPython运行时所需的网络协议栈的方法为:时空隔离域内需要初始化网络协议栈,当MicroPython调用BSD socket接口时,将调用时空隔离域的网络协议栈对应接口,执行对应的操作;
所述配置MicroPython运行时所需的RTC的方法为:时空隔离域需要从内核获取当前的RTC,并独立的管理RTC偏移;当MicroPython访问RTC时,将调用时空隔离域对应的RTC接口,同时加上RTC偏移完成访问;
所述配置MicroPython运行时所需的标准输入和输出的方法为:
a)MicroPython使用stdin时,将从时空隔离域的stdin输入数据;
b)MicroPython使用stdout时,将信息输出到时空隔离域的stdout;
c)MicroPython使用stderr时,错误信息将输出到时空隔离域的stderr。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010447609.9A CN111611016B (zh) | 2020-05-25 | 2020-05-25 | 一种基于时空隔离域加载MicroPython的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010447609.9A CN111611016B (zh) | 2020-05-25 | 2020-05-25 | 一种基于时空隔离域加载MicroPython的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111611016A CN111611016A (zh) | 2020-09-01 |
CN111611016B true CN111611016B (zh) | 2023-03-21 |
Family
ID=72200889
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010447609.9A Active CN111611016B (zh) | 2020-05-25 | 2020-05-25 | 一种基于时空隔离域加载MicroPython的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111611016B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105657204A (zh) * | 2016-02-01 | 2016-06-08 | 厦门锋联信息技术有限公司 | 一种带ip语音功能的4g无线传真装置及其使用方法 |
WO2016156657A1 (en) * | 2015-03-27 | 2016-10-06 | Cyberlightning Oy | Arrangement for implementation of data decentralization for the internet of things platform |
CN108334035A (zh) * | 2017-12-21 | 2018-07-27 | 苏州谷夫道自动化科技有限公司 | 一种数控系统编程方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10681016B2 (en) * | 2017-06-06 | 2020-06-09 | Giesecke+Devrient Mobile Security America, Inc. | Method and apparatus for operating a connected device using a secure element device |
-
2020
- 2020-05-25 CN CN202010447609.9A patent/CN111611016B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016156657A1 (en) * | 2015-03-27 | 2016-10-06 | Cyberlightning Oy | Arrangement for implementation of data decentralization for the internet of things platform |
CN105657204A (zh) * | 2016-02-01 | 2016-06-08 | 厦门锋联信息技术有限公司 | 一种带ip语音功能的4g无线传真装置及其使用方法 |
CN108334035A (zh) * | 2017-12-21 | 2018-07-27 | 苏州谷夫道自动化科技有限公司 | 一种数控系统编程方法 |
Non-Patent Citations (1)
Title |
---|
python动态加载模块;codingcode;《网页在线公开:jianshu.com/p/f41639a92c28》;第1-8页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111611016A (zh) | 2020-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5597196B2 (ja) | プロセス内のスケジューラインスタンス | |
US7127709B2 (en) | System and method for jointly managing dynamically generated code and data | |
WO2021196597A1 (zh) | 业务插件加载实现方法、装置和终端设备 | |
KR101366402B1 (ko) | 가상 실행 시스템 및 가상 실행 시스템의 성능 향상 방법 | |
KR100898315B1 (ko) | 인핸스드 런타임 호스팅 | |
JP4690437B2 (ja) | ネットワークアプリケーションにおける通信方法、通信装置及びそのためのプログラム | |
US7246346B2 (en) | System and method for persisting dynamically generated code in a directly addressable and executable storage medium | |
US7406684B2 (en) | Compiler, dynamic compiler, and replay compiler | |
EP0667575A2 (en) | Concurrent processing in object oriented parallel and near parallel systems | |
US20090307292A1 (en) | Dynamically changing a garbage collector in a managed runtime system | |
CN107977369B (zh) | 便于移植的嵌入式数据库管理系统 | |
KR20040068600A (ko) | 운영 시스템 기능 실행 방법 및 시스템, 전자 기기 | |
RU2494446C2 (ru) | Восстановление управления ресурсом обработки, который исполняет внешний контекст исполнения | |
JP2021530756A (ja) | ポーズレスなガベージ・コレクションのための活性化フレームを表す方法および装置 | |
KR102086757B1 (ko) | Gpu 메모리 스케줄러 및 이를 이용한 gpu 메모리 선점 방법 | |
US7350193B2 (en) | Procedure invocation in an integrated computing environment having both compiled and interpreted code segments | |
US7350211B2 (en) | Middleware application environment | |
Gui et al. | A framework for adaptive real-time applications: the declarative real-time OSGi component model | |
CN111611016B (zh) | 一种基于时空隔离域加载MicroPython的方法 | |
US8041852B1 (en) | System and method for using a shared buffer construct in performance of concurrent data-driven tasks | |
CN111338638A (zh) | 实现自动生成嵌入式软件部件之间通信的系统及其方法 | |
CN108647087B (zh) | 实现php内核可重入的方法、装置、服务器和存储介质 | |
US8321606B2 (en) | Systems and methods for managing memory using multi-state buffer representations | |
US8752052B2 (en) | Sub-dispatching application server | |
CN115061738B (zh) | 针对安卓组件化的业务模块初始化方法、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |