專利名稱:微處理器系統(tǒng)和用于防止該系統(tǒng)的模塊被更換的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及防止在微處理器系統(tǒng)上、尤其是在車輛的發(fā)動(dòng)機(jī)控制設(shè)備上進(jìn)行干擾操作。
背景技術(shù):
這種設(shè)備一般被構(gòu)造為具有一個(gè)微處理器、用于該微處理器的程序存儲(chǔ)器和工作存儲(chǔ)器以及一個(gè)或多個(gè)用于與發(fā)動(dòng)機(jī)上的傳感器和執(zhí)行器相通訊的接口。通過干擾操作處理器控制程序可以影響發(fā)動(dòng)機(jī)的特性,以便諸如獲得一個(gè)較高的發(fā)動(dòng)機(jī)功率。為防止對(duì)發(fā)動(dòng)機(jī)或傳動(dòng)繩可能有害的過載狀態(tài)而必需的、或者通過合法的預(yù)給定來進(jìn)行限制的功率限制可能通過上述方式被回避。因此需要采用一些技術(shù),這些技術(shù)使得在這種微處理器系統(tǒng)上不能進(jìn)行非法的干擾操作或者是至少以警告方式防止這種非法的干擾操作。
針對(duì)此目的而公開或應(yīng)用的一種技術(shù)是把這種微處理器系統(tǒng)的組件進(jìn)行粘合。然而事實(shí)表明以任何方式都不能再次被溶解的粘合劑是不存在的。此外粘合的一個(gè)重大缺點(diǎn)在于,由此不僅對(duì)于非法的干擾操作,而且同樣對(duì)于該微處理器系統(tǒng)的修理也變得困難。
發(fā)明內(nèi)容
本發(fā)明提供了一種微處理器系統(tǒng)以及一種用于防止該系統(tǒng)被更換模塊的方法,其大大增加了非法更換的難度,而不會(huì)降低該系統(tǒng)的易修理性。這種難度使得在能夠借助干擾操作來實(shí)現(xiàn)利用的絕大多數(shù)情況下,為此所必需的耗費(fèi)是不合適的,并因此使得這種干擾操作在經(jīng)濟(jì)意義上變得不可能。
本發(fā)明是基于具有多個(gè)模塊的一種微處理器系統(tǒng),其中包含一個(gè)微處理器和至少一個(gè)用于存儲(chǔ)微處理器的代碼和數(shù)據(jù)的存儲(chǔ)器模塊,其中在上述模塊的至少一個(gè)被標(biāo)識(shí)為被進(jìn)行更換保護(hù)的模塊中,該模塊的序列號(hào)以不可更改的方式而被存儲(chǔ)。在微處理器上通常在生產(chǎn)過程中被設(shè)有一個(gè)在程序技術(shù)上可查詢的序列號(hào),該序列號(hào)清楚地標(biāo)識(shí)了每個(gè)微處理器并且在制成的微處理器上是不可改變的。具有序列號(hào)的非易失存儲(chǔ)器模塊、尤其是閃存同樣是可用的。本發(fā)明規(guī)定在上述微處理器系統(tǒng)中借助至少一個(gè)被進(jìn)行更換保護(hù)的模塊的序列號(hào)根據(jù)一個(gè)預(yù)定的算法而計(jì)算出一個(gè)數(shù)據(jù)值,并把該值傳輸給控制模塊。該控制模塊把所接收到的數(shù)據(jù)值與一個(gè)在該模塊中被編碼的期望數(shù)據(jù)值相比較。如果這兩個(gè)值相一致,那么所述的被進(jìn)行更換保護(hù)的模塊的序列號(hào)是正確的,并且該微處理器系統(tǒng)才允許進(jìn)入其正常工作。如果這兩個(gè)數(shù)據(jù)值不一致,那么這意味著所述的被進(jìn)行更換保護(hù)的模塊已經(jīng)被非法更換,并且該微處理器系統(tǒng)的功能必需至少部分地被禁止,以免使得由于更換而使過程錯(cuò)誤地進(jìn)行,其中該過程可能導(dǎo)致由微處理器系統(tǒng)控制的裝置、尤其是車輛發(fā)動(dòng)機(jī)的損壞。
所述控制模塊優(yōu)選地同樣通過一個(gè)序列號(hào)來標(biāo)識(shí),并且所述的期望數(shù)據(jù)值與該序列號(hào)相同,也即,用于計(jì)算所述數(shù)據(jù)值的算法尤其借助所述至少一個(gè)被進(jìn)行更換保護(hù)的模塊的和所述控制模塊的序列號(hào)來確定,使得產(chǎn)生所述控制模塊的序列號(hào)作為結(jié)果。
將一種非易失的存儲(chǔ)器模塊考慮作為被進(jìn)行更換保護(hù)的模塊是有益的,其中存儲(chǔ)了比如由所述微處理器執(zhí)行的程序代碼或參數(shù)組,所述的微處理器訪問這些程序代碼或參數(shù)組以執(zhí)行其任務(wù)。
在現(xiàn)代的微處理器系統(tǒng)中尤其經(jīng)常采用所謂的閃存來存儲(chǔ)這類參數(shù)組。如果對(duì)存儲(chǔ)器的寫訪問通過一個(gè)口令字來保護(hù),那么這些電可擦寫的存儲(chǔ)器按照本發(fā)明就可以有意義地防止被更換。
更換保護(hù)甚至在所述系統(tǒng)的微處理器中也可以是有意義的,如果所述的微處理器連同一個(gè)程序存儲(chǔ)器一起作為單片微機(jī)的一部分,那么就尤其有意義。
可以設(shè)置所述的控制模塊以促使所述的微處理器詢問每個(gè)被進(jìn)行更換保護(hù)的模塊的序列號(hào),由此計(jì)算所述的確定的數(shù)據(jù)值并把把該值傳輸給所述的控制模塊。由此對(duì)于非法者來說,將很難通過改變微處理器的控制程序來禁止對(duì)被進(jìn)行更換保護(hù)的模塊的序列號(hào)的驗(yàn)證。
需要被所述的微處理器用來計(jì)算所述的確定的數(shù)據(jù)值的信息至少部分存放在與該微處理器集成在一起的程序存儲(chǔ)器中,這樣,非法更改控制程序也有效地變得困難,并且與存儲(chǔ)在比如一個(gè)外部存儲(chǔ)器中的信息相比,使非法訪問由此更加困難。
所述的信息優(yōu)選地包括在引導(dǎo)過程的框架內(nèi)要執(zhí)行的程序指令,也即在所述微處理器每次啟動(dòng)時(shí)被自動(dòng)執(zhí)行的程序指令。
另一種可能的保護(hù)措施是設(shè)置所述的控制模塊,使得如果所述的確定的數(shù)據(jù)值在一個(gè)給定的時(shí)間間隔內(nèi)沒有被接收到,那么它至少部分地禁止所述微處理器系統(tǒng)的功能。也即,盡管非法者成功地通過改變微處理器的程序來防止該微處理器把一個(gè)數(shù)據(jù)值傳輸給所述的控制模塊-該控制模塊是借助該數(shù)據(jù)值才能夠識(shí)別一個(gè)受保護(hù)的模塊被更換的,但是所述微處理器系統(tǒng)的正常工作仍然被禁止。
本發(fā)明的其他特征和優(yōu)點(diǎn)參見后面的實(shí)施例說明并參照附圖。
其中附圖1示出了根據(jù)本發(fā)明的微處理器系統(tǒng)的第一方案的框圖;附圖2示出了附圖1的所述微處理器系統(tǒng)中的工作過程流程圖;附圖3示出了根據(jù)本發(fā)明的微處理器系統(tǒng)的第二方案的框圖;以及附圖4示出了附圖3的所述微處理器系統(tǒng)中的工作過程流程圖。
具體實(shí)施例方式
附圖1示出了一種發(fā)動(dòng)機(jī)控制設(shè)備的框圖,其中該發(fā)動(dòng)機(jī)控制設(shè)備比如應(yīng)當(dāng)適用于根據(jù)本發(fā)明的微處理器系統(tǒng)。在一個(gè)印刷電路板的總線1上連接了一個(gè)單片微機(jī)2、一個(gè)或多個(gè)分別有一個(gè)獨(dú)立的序列號(hào)來標(biāo)識(shí)的存儲(chǔ)器模塊(其中在該附圖中為了簡(jiǎn)單起見僅示出了一個(gè)閃存3)、一個(gè)諸如可以實(shí)施為ASIC的控制模塊4、一個(gè)讀寫存儲(chǔ)器模塊5以及一個(gè)用于與待控制發(fā)動(dòng)機(jī)的傳感器和執(zhí)行器(未示出)相通訊的接口6。所述模塊2、3、4、5均由獨(dú)立的IC來構(gòu)造。在單片微機(jī)2中集成了一個(gè)微處理器10和一個(gè)固化的程序存儲(chǔ)器11。使微處理器10與程序存儲(chǔ)器11相通訊的內(nèi)部總線12優(yōu)選地沒有伸展出所述的芯片2,如此使得程序存儲(chǔ)器11的內(nèi)容不能在所述單片微機(jī)芯片外部被非法讀出。所述程序存儲(chǔ)器11尤其含有控制設(shè)備的引導(dǎo)過程的程序指令。
所述的閃存3具有一個(gè)通??蓪ぶ返闹鞔鎯?chǔ)器區(qū)域7,該主存儲(chǔ)器區(qū)域被發(fā)動(dòng)機(jī)控制設(shè)備的生產(chǎn)者寫入了微處理器10的程序指令和參數(shù)區(qū),并且該主存儲(chǔ)器區(qū)域的指令在所述引導(dǎo)過程成功實(shí)施之后而被處理。所述的主存儲(chǔ)器區(qū)域7通常是可尋址地通過所述總線1來讀出。另外所述閃存還具有輔助存儲(chǔ)器單元8,其中該輔助存儲(chǔ)器單元已經(jīng)由所述閃存3的生產(chǎn)者自己寫入了一個(gè)序列號(hào),該序列號(hào)標(biāo)識(shí)了給定型號(hào)的任一存儲(chǔ)器。同樣所述輔助存儲(chǔ)器單元7的內(nèi)容也可以通過所述總線1讀出,然而,用于讀出輔助存儲(chǔ)器單元7所需要的地址信號(hào)的格式優(yōu)選地不同于主存儲(chǔ)器區(qū)域7的尋址的。這樣比如為了讀出所述的輔助存儲(chǔ)器單元8就需要首先通過總線1發(fā)送一個(gè)特征字給所述閃存3。從而不可能由一個(gè)管腳匹配而且無生產(chǎn)者序列號(hào)的存儲(chǔ)器模塊來替換所述的閃存3,其中在該存儲(chǔ)器模塊上在正??蓪ぶ返拇鎯?chǔ)器單元中已經(jīng)只被復(fù)制了所述閃存3的序列號(hào)。所述的閃存3由此可以僅僅由相同類型的、但具有不同序列號(hào)的模塊來替換。
所述微處理器系統(tǒng)的工作方式借助附圖2的流程圖來解釋。在啟動(dòng)過程中所述的微處理器10每次都執(zhí)行一個(gè)引導(dǎo)過程。該引導(dǎo)過程用于諸如所述接口6的以及有時(shí)與之相連的傳感器和執(zhí)行器的初始化,并且還用于驗(yàn)證在該微處理器系統(tǒng)上是否在該系統(tǒng)被關(guān)閉期間已進(jìn)行了干擾操作。用于所述的后一目的的程序指令被存儲(chǔ)在所述的程序存儲(chǔ)器11中,并且該程序指令在開始引導(dǎo)過程時(shí)和在首次訪問存儲(chǔ)在所述單片微機(jī)2外部的程序指令之前被執(zhí)行。
為了驗(yàn)證是否已經(jīng)進(jìn)行了非法的干擾操作,所述微處理器10在附圖2的步驟S1中讀出所有被進(jìn)行更換保護(hù)的模塊的序列號(hào),在本實(shí)施例中是所述閃存3的序列號(hào),以及單片微機(jī)2的比如被存儲(chǔ)在程序存儲(chǔ)器11中的專用序列號(hào)。所讀出的序列號(hào)在步驟S2中由微處理器10通過預(yù)先給定的、同樣被存儲(chǔ)在程序存儲(chǔ)器11中的計(jì)算步驟進(jìn)行邏輯連接。該計(jì)算步驟確定了(如果所讀出的序列號(hào)是正確的)所具有的結(jié)果為存儲(chǔ)在控制模塊4中的編碼數(shù)字。
在所述邏輯連接中所執(zhí)行的程序指令被存儲(chǔ)在程序存儲(chǔ)器11中,并且對(duì)于一個(gè)產(chǎn)品系列的所有的微處理器系統(tǒng)都是一樣的。所述邏輯連接的結(jié)果與所述編碼數(shù)字相一致在最簡(jiǎn)單的情況下是通過以下方式來實(shí)現(xiàn)的,即在設(shè)備裝配期間所被裝配的、被進(jìn)行更換保護(hù)的模塊的序列號(hào)被讀出,所述邏輯連接的結(jié)果被運(yùn)算出并且作為編碼數(shù)字而被記錄在所述控制模塊中。
然而編碼數(shù)字也可以是一個(gè)有意選擇的、在裝配之前已經(jīng)被存儲(chǔ)在所述控制模塊4中的數(shù)據(jù)值,比如控制模塊4的序列號(hào)。在這種情況下為了保證使邏輯連接的結(jié)果與所述編碼數(shù)字相一致,必需在所述邏輯連接中至少輸入一個(gè)有意選擇的參數(shù),其中該參數(shù)保證了所述邏輯連接的期望結(jié)果。該參數(shù)的值在設(shè)備裝配中通過有關(guān)模塊的序列號(hào)來確定,并且被記錄在一個(gè)存儲(chǔ)器中,優(yōu)選的是所述閃存3中。
在最簡(jiǎn)單的情況下所述的邏輯連接可能是把所述被進(jìn)行更換保護(hù)的模塊的序列號(hào)與一個(gè)參數(shù)相加,其中該參數(shù)如此來選擇,即所述的編碼數(shù)字作為相加的結(jié)果而得到。當(dāng)然可以預(yù)先確定任意不同的、復(fù)雜的也可能使用更多參數(shù)的邏輯連接。
在步驟S3中所述邏輯連接的結(jié)果被發(fā)送給所述的控制模塊。在步驟S4中來判斷所接收的值是否與所述的編碼數(shù)字相一致。如果一致,那么所述的微處理器在步驟S6中繼續(xù)進(jìn)行其控制程序的處理并最后轉(zhuǎn)向常規(guī)工作;否則所述的控制模塊4發(fā)送一個(gè)復(fù)位信號(hào)給所述的微處理器10,結(jié)果是,微處理器進(jìn)入步驟S1至S3的死循環(huán)中并且不再進(jìn)行常規(guī)工作。
在附圖3中所示出的微處理器的第二方案與附圖1的不同之處主要在于,所述的微處理器10和所述的程序存儲(chǔ)器11被實(shí)施在兩個(gè)獨(dú)立的芯片上。所述的程序存儲(chǔ)器11象所述的閃存3一樣通過一個(gè)由所述存儲(chǔ)器生產(chǎn)者單獨(dú)給定的序列號(hào)來防止更換。所述的微處理器10在此可以具有一個(gè)單獨(dú)的序列號(hào)并同樣被防止更換,然而這只具有次要的意義,原因在于把微處理器10更換為相同型號(hào)的其他微處理器不影響微處理器系統(tǒng)的功能。
所述的程序存儲(chǔ)器11和所述的微處理器10在此通過公共總線1來進(jìn)行通訊,如此使得不能防止非法讀出所述存儲(chǔ)器11的程序代碼。
該方案的工作方式通過附圖4的流程圖來進(jìn)行描述。在所述系統(tǒng)的啟動(dòng)過程中所述的控制模塊4在步驟S11中產(chǎn)生一個(gè)微處理器10的復(fù)位脈沖。接著在步驟S12中所述控制模塊4的內(nèi)部時(shí)鐘發(fā)生器被啟動(dòng)。同時(shí)所述的微處理器10開始執(zhí)行復(fù)位例行程序,其中該例行程序的程序指令已存儲(chǔ)在程序存儲(chǔ)器11中。所述的復(fù)位例行程序包括在步驟S21中讀出被進(jìn)行更換保護(hù)的模塊的序列號(hào),在步驟S22中以與前所述的步驟S2相同的方式進(jìn)行邏輯連接,并且在步驟S23中把結(jié)果發(fā)送給所述的控制模塊4。
當(dāng)所述的微處理器10執(zhí)行所述的復(fù)位例行程序時(shí),所述的控制模塊驗(yàn)證是否存在所述時(shí)鐘發(fā)生器的一個(gè)信號(hào),該信號(hào)表示自從它啟動(dòng)以來已經(jīng)過去了一個(gè)給定的時(shí)間段(S13)。該時(shí)間段長(zhǎng)于所述微處理器用于步驟S21至S23所需要的時(shí)間。只要所述的時(shí)間段沒有結(jié)束,那么所述的控制模塊4就在步驟S14中驗(yàn)證微處理器的邏輯連接的結(jié)果是否到達(dá)。如果沒有,那么它就繼續(xù)等待,必要時(shí)直至所述給定時(shí)間段結(jié)束。在所述時(shí)間段結(jié)束之后它就轉(zhuǎn)回到步驟11并再次發(fā)送一個(gè)復(fù)位脈沖給所述微處理器。
如果所述的邏輯連接結(jié)果及時(shí)出現(xiàn),那么它就在步驟S15中與控制模塊的編碼數(shù)字相比較。在一致的情況下所述的控制模塊4就不再繼續(xù)動(dòng)作,并且所述微處理器轉(zhuǎn)向常規(guī)工作S24。在不一致的情況下所述的控制模塊4再次轉(zhuǎn)向步驟S11并發(fā)送一個(gè)復(fù)位脈沖。這樣,如果所述的控制模塊4因更換了一個(gè)被進(jìn)行更換保護(hù)的模塊而收到一個(gè)錯(cuò)誤邏輯連接結(jié)果,那么所述的微處理器10不僅進(jìn)入步驟S21至S23的死循環(huán)中,而且甚至在干擾操作或更換一個(gè)模塊時(shí)導(dǎo)致所述微處理器10在啟動(dòng)時(shí)就不能再執(zhí)行步驟S21至S23。
權(quán)利要求
1.具有多個(gè)模塊的微處理器系統(tǒng),其中有一個(gè)微處理器(10)和至少一個(gè)用于存儲(chǔ)所述微處理器(10)的代碼和/或數(shù)據(jù)的存儲(chǔ)器模塊(3、11),在所述模塊(3、11)的至少一個(gè)被標(biāo)識(shí)為被進(jìn)行更換保護(hù)的模塊中以不可更改的方式存儲(chǔ)了該模塊的一個(gè)序列號(hào),其特征在于,所述微處理器系統(tǒng)具有一個(gè)控制模塊(4),該控制模塊被設(shè)置用來接收一個(gè)由所述至少一個(gè)的序列號(hào)來確定的數(shù)據(jù)值,并且在所接收的數(shù)據(jù)值與一個(gè)在所述控制模塊(4)中被編碼的期望數(shù)據(jù)值不一致的情況下,至少部分地禁止所述微處理器系統(tǒng)的功能。
2.根據(jù)權(quán)利要求1的微處理器系統(tǒng),其特征在于,與所述被進(jìn)行更換保護(hù)的模塊(3、11)不同的控制模塊(4)具有一個(gè)序列號(hào),所述的期望數(shù)據(jù)值與該序列號(hào)相同。
3.根據(jù)前述權(quán)利要求之一的微處理器系統(tǒng),其特征在于,所述的至少一個(gè)被進(jìn)行更換保護(hù)的模塊(3、11)為一種非易失的存儲(chǔ)器模塊。
4.根據(jù)權(quán)利要求3的微處理器系統(tǒng),其特征在于,所述的存儲(chǔ)器模塊為一種口令字保護(hù)的閃存。
5.根據(jù)前述權(quán)利要求之一的微處理器系統(tǒng),其特征在于,所述的至少一個(gè)被進(jìn)行更換保護(hù)的模塊是一種包括所述微處理器(10)以及一個(gè)程序存儲(chǔ)器(11)的單片微機(jī)(2)。
6.根據(jù)前述權(quán)利要求之一的微處理器系統(tǒng),其特征在于,所述的控制模塊(4)被設(shè)置用來促使所述的微處理器(10)詢問每個(gè)被進(jìn)行更換保護(hù)的模塊(3、11)的序列號(hào),由此計(jì)算所述的確定的數(shù)據(jù)值并把該值傳輸給所述的控制模塊(4)(S3、S23)。
7.根據(jù)權(quán)利要求5和6微處理器系統(tǒng),其特征在于,需要被所述的微處理器(10)用來計(jì)算所述的確定的數(shù)據(jù)值的信息至少部分地存放在所述的程序存儲(chǔ)器(11)中。
8.根據(jù)權(quán)利要求7的微處理器系統(tǒng),其特征在于,所述的信息包括在引導(dǎo)過程中要執(zhí)行的程序指令(S1、S2、S3;S21、S22、S23)。
9.根據(jù)前述權(quán)利要求之一的微處理器系統(tǒng),其特征在于,設(shè)置所述的控制模塊(4),使得如果所述的確定的數(shù)據(jù)值在一個(gè)給定的時(shí)間間隔內(nèi)沒有被接收到,則它至少部分地禁止所述微處理器系統(tǒng)的功能。
10.用于保護(hù)一種微處理器系統(tǒng)以防止更換模塊的方法,具有以下步驟a)讀出(S1、S21)所述微處理器系統(tǒng)的一個(gè)或多個(gè)被進(jìn)行更換保護(hù)的模塊(3、11)的序列號(hào),b)確定(S2、S22)一個(gè)通過所述的一個(gè)或多個(gè)序列號(hào)來確定的數(shù)據(jù)值,c)把在步驟b)中所確定的數(shù)據(jù)值傳輸(S3、S23)給一個(gè)控制模塊(4),d)如果所述的控制模塊(4)得到所述的被傳輸?shù)臄?shù)據(jù)值與一個(gè)在該控制模塊(4)中編碼的期望數(shù)據(jù)值不同,那么所述微處理器系統(tǒng)的功能就至少部分地被禁止。
11.根據(jù)權(quán)利要求10的方法,其特征在于,所述的數(shù)據(jù)值在步驟b)中借助一種算法來被確定,其中該算法在系統(tǒng)裝配中就已經(jīng)借助一個(gè)或多個(gè)被進(jìn)行更換保護(hù)的模塊(3、11)的序列號(hào)而被確定。
12.根據(jù)權(quán)利要求11的方法,其特征在于,所述的算法此外還借助所述控制模塊(4)的序列號(hào)而被確定,使得在步驟b)中所確定的數(shù)據(jù)值為所述控制模塊(4)的序列號(hào)。
13.根據(jù)權(quán)利要求11或12的方法,其特征在于,總是在啟動(dòng)所述微處理器系統(tǒng)時(shí)被執(zhí)行,或者周期性地在所述微處理器系統(tǒng)的工作過程中被執(zhí)行。
14.根據(jù)權(quán)利要求10至13之一的方法,其特征在于,所述的步驟b)包括一個(gè)或多個(gè)數(shù)學(xué)或邏輯操作,并且由所述微處理器系統(tǒng)的微處理器(10)來執(zhí)行。
15.根據(jù)權(quán)利要求10至14之一的方法,其特征在于,如果所述的確定的數(shù)據(jù)值在一個(gè)給定的時(shí)間間隔內(nèi)沒有被接收到,那么所述微處理器系統(tǒng)的功能至少被部分地禁止。
全文摘要
微處理器系統(tǒng)包括多個(gè)模塊,其中有一個(gè)微處理器(10)和至少一個(gè)用于存儲(chǔ)所述微處理器(10)的代碼和/或數(shù)據(jù)的存儲(chǔ)器模塊(3、11)。在所述模塊(3、11)的至少一個(gè)被標(biāo)識(shí)為被進(jìn)行更換保護(hù)的模塊中以不可更改的方式存儲(chǔ)了該模塊的一個(gè)序列號(hào)。一個(gè)控制模塊(4)被設(shè)置用來接收一個(gè)由所述至少一個(gè)的序列號(hào)來確定的數(shù)據(jù)值,并且在所接收的數(shù)據(jù)值與一個(gè)在所述控制模塊(4)中被編碼的期望數(shù)據(jù)值不一致的情況下,至少部分地禁止所述微處理器系統(tǒng)的功能。
文檔編號(hào)G06F21/73GK1530853SQ200410030460
公開日2004年9月22日 申請(qǐng)日期2004年3月15日 優(yōu)先權(quán)日2003年3月14日
發(fā)明者J·韋伯, J 韋伯, K·施奈德爾, 蔚露, A·奧厄 申請(qǐng)人:羅伯特-博希股份公司