---
title: Start
framework: DriverKit
role: symbol
role_heading: Instance Method
platforms: [DriverKit, iOS, iPadOS, macOS]
path: kernel/ioservice/3180710-start
---

# Start

Starts the current service and associates it with the specified provider.

## Declaration

```occ
virtual kern_return_t Start(IOService *provider);
```

## Parameters

- `provider`: The provider object that matches the current service. Cast this object to the class you expect. The system retains this object for the duration of your [doc://com.apple.documentation/documentation/SerialDriverKit/IOUserSerial/Start](serialdriverkit/iouserserial/start.md) method. The system continues to retain the object if your service starts successfully, releasing it only after calling your service’s [doc://com.apple.documentation/documentation/SerialDriverKit/IOUserSerial/Stop](serialdriverkit/iouserserial/stop.md) method.

## Return Value

[kIOReturnSuccess](../../driverkit/kioreturnsuccess.md) on success, or another value if an error occurs. For a list of error codes, see [Error Codes](../../driverkit/error-codes.md).

## Discussion

After successfully matching the specified `provider` to your driver’s service, the system instantiates your service object and calls this method. Use this method to configure your driver’s data structures and setup the associated hardware. You might also store a reference to the `provider` object for later use. After you configure your driver, call the [RegisterService](../../driverkit/ioservice/registerservice.md) method to let the system know your service is running.

Always call `super` early in your implementation of this method.

## See Also

### Running the Service

- [init](../../driverkit/ioservice/init.md)
- [Stop](../../driverkit/ioservice/stop.md)
- [free](../../driverkit/ioservice/free.md)
